SQL: nullable oder not nullable

FanClub

Mitglied
Hi,

ich habe eine Frage bezüglich der Performance einer Datenbank bei einem SQL Statement.

Das Statement ist momentan so:
SQL:
SELECT * FROM bai WHERE ((bai_hist_id_ban > 0) OR (bai_hist_id_ban < 0)) 
AND ((bai_hist_id_bw > 0) OR (bai_hist_id_bw < 0)) 
AND bai_qs_datum 
BETWEEN to_date( '2011-09-01' , 'yyyy-MM-dd') 
AND CURRENT_DATE

Das läuft relativ schnell aber so stehen in der Tabelle auch ziemlich viele Felder mit dem Wert "0", da nur ein kleiner Teil der DS einen Verknüpfung besitzt und somit einen Wert größer als "0" hat.
In der Tabelle befinden sich ca. 2 Millionen Datensätze.

Ich habe die Spalten in der Tabelle (bai_hist_id_ban und bai_hist_id_bw) "null able" gemacht und das Statement mit "IS NOT NULL" durchsuchen lassen, was wesentlich länger gedauert hat.
Kann man da noch etwas "tunen" oder sind abfragen über "null able" Felder immer langsamer?

Auf beiden Spalten liegt ein Index.

gruß
 
Zuletzt bearbeitet von einem Moderator:
M

Marcinek

Gast
Liegt ein Index auf der Tabelle? - Aber ich glaube, dass die meisten DBs NULL als das ansehen, was sie sind und zwar nichts.

Das führt dazu, dass diese nicht in IndexTrees aufgenommen werden.

Jenachdem welche DB du benutzt kannst du dir ein Profil der Abfrage anfertigen lassen. Dann siehst du ob er den Index nutzt oder nicht.

Gruß,

Martin
 

FanClub

Mitglied
Hi,

ja auf den beiden spalten liegt ein Index.
Wenn ich mir das Profil des Statemants ansehe, mit einem "null able" Feld, dann wird mit kein Index angezeigt.

Sobald das Feld(die beiden Felder) not null able ist und eine "0" drin steht, greift der index.

Kann man da noch irgendwas einrichten oder wird, sobald "null" vorkommt kein index verwendet?
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Neue Themen


Oben