wie kann man denn rausbekommen, ob bei einer DB-Tabellen-Abfrage ein Index benutzt wird? Hab' mal wieder das Problem, das ein Report viel zu lange braucht und ich möchte nun wissen, ob bei der Abfrage überhaupt auf einen Index zugegriffen wird.
Und gibt es Dinge, die man beachten sollte, damit der Index auch wirklich genutzt wird? So z.B. wie "NOT-Abfragen vermeiden" oder ähnliches...
"Geben Sie in der WHERE-Klausel wenn möglich für alle Felder des Index logische Vergleiche mit dem Gleichheitsoperator (=) an, die mit AND verknüpft sind. Verwenden Sie in der WHERE-Klausel für die Indexfelder nur positive Operatoren wie = statt <> und auch nicht das Sprachelement NOT, da diese nicht durch Indizes unterstützt werden. Wenn Sie nur einen Teil eines Index in der WHERE-Klausel angeben, spielt die Reihenfolge der Indexfelder eine wichtige Rolle. Ein Indexfeld in einer WHERE-Klausel führt im Allgemeinen nur dann zur Auswertung des Index, wenn alle vor ihm in der Indexdefinition liegenden Felder vollständig in der WHERE-Bedingung angegeben sind. Bei der Auswahl und Anwendung eines Index verwertet das System in der Regel keine mit OR verknüpften Operanden, es sei denn, der Operator OR steht in der logischen Bedingung in der höchsten Ebene. Verwenden Sie also beispielsweise:
.. WHERE (CARRID = 'LH' AND CITYFROM = 'FRANKFURT') OR
(CARRID = 'LH' AND CITYFROM = 'NEW YORK'):
statt:
..WHERE carrid = 'LH' AND
(cityfrom = 'FRANKFURT' OR cityfrom = 'NEW YORK').
Fragen Sie keine Indexspalte mit der Bedingung IS NULL ab, da einige Datenbanken diese nicht für Indizes unterstützen.
Große Effizienzgewinne lassen sich erreichen, wenn alle Spalten einer SELECT-Klausel Teil eines Indizes sind, da dann nur der Index gelesen werden muss."