sayso Geschrieben 28. November 2006 Teilen Geschrieben 28. November 2006 Hallo Kollegen, ich wurde gerade etwas von einem Kollegen gefragt und konnte leider nicht mit 100% Sicherheit darauf antworten, deshalb frag ich hier mal lieber nach. Folgendes Szenario: Tabelle User | ID | | Userid | | NName | | VName | | Ort | | E-Mail | Tabelle User hat einen Index der über folgende Felder gelegt wurde ( ID, Userid, NName, VName). Nun wurde ich von einem Kollegen gefragt, ob der angelegte Index auch benutzt wird wenn er einen Select mit einer WHERE Bedingungen auf die Felder NName und VName macht. Ich habe leider keine Ahnung wie der Index über mehrer Felder intern gestrickt ist, so daß ich hierzu keine 100% Aussage treffen konnte. Ich kann natürlich das Statement absetzen und mir den EXECUTION PLAN ansehen, aber dann weiss ich zwar das es geht aber warum weiss ich immernoch nicht. Also wird der Index dann verwendet wenn ein Select auf nur ein paar Felder eingeschränkt ist, aber der Index mehrere Felder beinhaltet ? Wenn ja warum , wenn nein warum nicht.... Danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sayso Geschrieben 6. Dezember 2006 Autor Teilen Geschrieben 6. Dezember 2006 [PUSH] Kann mir denn keiner die Frage beantworten ? :( Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jasper Geschrieben 6. Dezember 2006 Teilen Geschrieben 6. Dezember 2006 [PUSH] Kann mir denn keiner die Frage beantworten ? :( langsam, langsam, gibt noch ein leben neben der arbeit. prinzipiell ja. selbst wenn das prädikat der where-klausel nicht in den führenden spalten eines index vorkommt, kann oracle den index verwenden. das ganze nennt sich SKIP SCAN INDEX ACCESS und gibt es seit 9i. hat ein paar einschränkungen bezüglich des indextyps (keine bitmap, domain, reverse oder function-bases indizes). -j Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sayso Geschrieben 6. Dezember 2006 Autor Teilen Geschrieben 6. Dezember 2006 langsam, langsam, gibt noch ein leben neben der arbeit. prinzipiell ja. selbst wenn das prädikat der where-klausel nicht in den führenden spalten eines index vorkommt, kann oracle den index verwenden. das ganze nennt sich SKIP SCAN INDEX ACCESS und gibt es seit 9i. hat ein paar einschränkungen bezüglich des indextyps (keine bitmap, domain, reverse oder function-bases indizes). -j Hallo Jasper, sorry aber nachdem sich nach über einer Woche nichts auf meinen Post getan hat, habe ich gepushed :-) Aber in meinen Fall kommen die Felder aus der where-Klauses im Index vor (siehe Beispiel NName, VName). In dem angelegten Index sind aber noch mehrere Felder enthalten als nur die beiden, die in der where-Klausel angegeben wurden. Trifft dies dafür auch zu? Danke für deine Antwort :nett: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jasper Geschrieben 7. Dezember 2006 Teilen Geschrieben 7. Dezember 2006 Aber in meinen Fall kommen die Felder aus der where-Klauses im Index vor (siehe Beispiel NName, VName). In dem angelegten Index sind aber noch mehrere Felder enthalten als nur die beiden, die in der where-Klausel angegeben wurden. Trifft dies dafür auch zu? entscheidend ist, ob die führende spalte des index in der where-klausel enthalten ist. wenn ja, wird normaler index scan access verwendet, wenn nicht, index skip scan access verwendet. ob der index mehr spalten umfasst als in der where-klausel angegeben ist dabei irrelevant, Oracle kann die nicht benötigten indexeinträge ausfiltern. Oracle verwendet indizes, wenn mindestens eine spalte der where-klausel im index enthalten ist. das beschreibt aber nur die möglichkeiten seitens Oracle, ob ein index verwendet wird hängt vom CBO ab. in deinem fall, index umfasst mehr spalten als in where-klausel angegeben, kann es sehr gut sein, dass der indexzugriff zu teuer wird. -j 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.