Ich verwende eine Ansicht, die auf einer komplexen Abfrage mit 17 Joins (sowohl innere als auch linke/rechte äußere) und Unterabfragen basiert. Alle Zeilen der Ansicht werden in etwa 5 Sekunden angezeigt.
SELECT * FROM a_view;
Eine der Spalten der Ansicht hat den Typ BIT. Und wenn ich Ansichtszeilen filtere und sie mit 1 vergleiche, funktioniert eine Abfrage wieder etwa 5 Sekunden.
SELECT * FROM a_view WHERE c = 1;
Aber wenn ich diese BIT-Spalte mit 0 vergleiche, dauert eine Abfrage etwa 50 Sekunden (10 mal langsamer).
SELECT * FROM a_view WHERE c = 0;
Diese Abfrage, die dieselben Ergebniszeilen liefert, funktioniert wie erwartet etwa 10 Sekunden:
SELECT * FROM a_view
EXCEPT
SELECT * FROM a_view WHERE c = 1;
Ich frage mich also, warum der Vergleich mit 0 oder 'FALSE' so viel Zeit in Anspruch nimmt? Irgendwelche Ideen, bitte.
Die Sortierung nach diesem BIT-Feld ist schnell. Auch das Filtern nach anderen Spalten ist schnell.
0 Stimmen
Welches Datenbanksystem verwenden Sie? Der Ausführungsplan für beide könnte interessant sein.
0 Stimmen
Entschuldigung, ich habe gerade den sqlserver-Tag gesehen. Welche Version?
1 Stimmen
Das erinnert mich an einen Dilbert-Cartoon, in dem ein Verkäufer die Videokomprimierung damit erklärt, dass 1en schön schlank und klein sind, 0en aber dick und rund sind und mehr Platz brauchen.