Zitat Zitat von Fuerchau Beitrag anzeigen
Da kann ich Dieter nur zustimmen.
Die Reihenfolge der Whereklausel ist bei Vergleichen ungleich "=" von entscheidender Bedeutung:

where F1 between :#V1 and :#V2
and F2 between :#V3 and :#V4

Wenn V1 = Minval und V2 = Maxval wird ein Tablescan erzwungen.
Das war einmal! Zu CQE-Zeiten.
Heute wird das SQL-Statement analysiert und in Verbindung mit dem Statistics Manager, der Informationen darüber liefert wie viele verschiedene Schlüssel und Werte ein bestimmter Index liefert und wie schnell man mit diesem Index an die Daten kommt (bzw. wieviel das "kostet").
Die Indices werden vorselektiert, d.h. es wird zunächst geprüft, ob sich die Join-Felder, die Felder, die in den WHERE-Bedingungen auf =, IN und BETWEEN geprüft werden als Schlüssel-Felder in Indices hinterlegt sind. Dann werden die verschiedenen Indices bewertet und sobald ein "teurer" Index gefunden wird, wird der "günstigste" Index verwendet und die weitere Prüfung abgebrochen.
Ein (Binary Radix Tree) Index wird i.Ü. nur verwendet wenn weniger als 15-20% der Daten selektiert wurden.
Zwischen 15-20 und 70-80% kann der Optimizer auch noch einen Encoded Vector Index (EVI) verwenden, ansonsten wird die ganze Tabelle verarbeitet, (wobei auch nicht mehr Table Scans verwendet werden, sondern meist über RRN- und Values Listen gearbeitet wird.