meht Geschrieben 6. Juli 2010 Teilen Geschrieben 6. Juli 2010 (bearbeitet) Hi, ich mache einen einfachen selekt auf eine Tabelle: SELECT * FROM table WHERE creation_date > 20100416164036513; Die Spalte "creation_date" ist indiziert, der Index wird aber nicht gezogen. Der Ausführungsplan sieht so aus: QUERY_PLAN TABLE ACCESS FULL table Wenn ich den select mit "=" starte, zieht Oracle den Index: SELECT * FROM table WHERE creation_date = 20100416164036513; TABLE ACCESS BY INDEX ROWID table INDEX RANGE SCAN IDX$$_164B0001 Muss ich bei "größer als" anders indizieren, oder macht die Verwendung eines Index für den Optimierer keinen Sinn, da zu viele Zeilen gefunden werden? Danke! Bearbeitet 6. Juli 2010 von meht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 6. Juli 2010 Teilen Geschrieben 6. Juli 2010 Hi, kann natürlich sein, dass die Kosten für einen Full Table Scan niedriger sind als für die Benutzung des Indexes. Vielleicht fehlen Statistiken zu dem Index? Ansonsten versuch mal einen Hint, damit der Index auf jeden Fall genutzt wird, und vergleiche die Kosten mit dem FTS: OTN Discussion Forums : use Hint to force using index does not ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 6. Juli 2010 Teilen Geschrieben 6. Juli 2010 Hi, und was ist denn create_date für ein Format? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 6. Juli 2010 Teilen Geschrieben 6. Juli 2010 Hier werden gleich zwei Fehler gemacht. 1. Du speicherst ein Datum als String ab. Warum? 2. Du gehst davon aus, dass ein Indexzugriff immer schneller ist als ein FTS. Vergleiche einen Index mit einem Stichwortverzeichnis. Wenn Du nur zu ein paar Wörtern die Inhalte heraussuchen möchtest, geht das über das Stichwortverzeichnis natürlich sehr schnell. Musst Du aber für sehr viele Wörter nachschlagen, kommt Du irgendwann an einen Punkt, an dem es schneller ist, dass Buch einfach von vorne bis hintern durchzublättern anstatt für jedes Wort einzeln nachzuschlagen. Der Optimizer greift, davon abgesehen, noch auf einige Feinheiten wie Histogramme, Cachverhalten, Geschwindigkeit der Platten und CPUs etc. zu, die in die Berechnung mit einfließen. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.