# SQL: nullable oder not nullable



## FanClub (30. Sep 2011)

Hi,

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

Das Statement ist momentan so:

```
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ß


----------



## Marcinek (30. Sep 2011)

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 (30. Sep 2011)

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?


----------



## Marcinek (30. Sep 2011)

FanClub hat gesagt.:


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



Wie gesagt ist NULL kein Wert und wird dementsprechend nicht in den Index aufgenommen, was das Suchen daraauf erschwert.


----------

