Angenommen, ich habe eine Tabelle my_table
mit Feld kind:string
und einen Index für dieses Feld.Index im Abfrageplan wird übersprungen, wenn OR-Bedingung in Postgres
Ich habe bemerkt, dass Postgres zwei verschiedene Abfragepläne für die Abfragen erstellt:
SELECT * FROM my_table
WHERE kind = 'kind1' OR kind IS NULL;
und
SELECT * FROM my_table
WHERE kind = 'kind1';
Die erste nicht-Index nicht verwendet, während der zweite Fall ist. Warum?
Ich weiß, dass es viele Bedingungen gibt, warum Indizes verwendet werden können oder nicht, und ich habe viel über Abfragepläne gelesen, aber dieser Fall ist mir immer noch nicht klar.
Eigentlich ist 'art IN ('kind1', NULL)' gleich 'kind = 'kind1''. – Abelisto
@Abelisto, dumme Frage, bearbeitet –