Ursachen für Oracle-Indexfehler: 1. Nichtverwendung von „IS NULL“ und „IS NOT NULL“ 3. Verwendung von Funktionen in der WHERE-Klausel; 5. Verwendung von; Ungleichheitsoperation in der WHERE-Klausel 6. Vergleich nicht übereinstimmender Datentypen usw.
Die Betriebsumgebung dieses Tutorials: Windows 10-System, Oracle 11g-Version, Dell G3-Computer.
Das Ziel von Oracle-Indizes besteht darin, vollständige Tabellenscans zu vermeiden und die Abfrageeffizienz zu verbessern, aber manchmal ist dies kontraproduktiv.
Wenn eine Tabelle beispielsweise Millionen von Daten enthält und einem bestimmten Feld ein Index hinzugefügt wird, sich die Abfrageleistung jedoch nicht verbessert, kann dies an einem Ausfall des Oracle-Index liegen. Für Oracle-Indizes gelten einige Einschränkungen, selbst wenn Sie einen Index hinzugefügt haben. Die Abfrageleistung wird im Vergleich zum Nicht-Hinzufügen eines Indexes möglicherweise nicht verbessert zur Datenbank Der Systemaufwand für die Pflege des Index führt zu einer schlechteren Leistung. Im Folgenden finden Sie eine Zusammenfassung der sieben Einschränkungen, die zum Scheitern von Oracle-Indizes führen können.
1. Keine WHERE-Klausel
2. Verwenden Sie IS NULL und IS NOT NULL Verwenden von Funktionen in
Wenn Sie keine funktionsbasierten Indizes verwenden, führt die Verwendung von Funktionen für Spalten, die Indizes in der where-Klausel haben, dazu, dass der Optimierer diese Indizes ignoriert. Beispiel:
select * from staff where trunc(birthdate) = '01-MAY-82';
Aber wenn die Funktion auf die Bedingung angewendet wird, kann der Index wirksam werden. Ändern Sie die obige Anweisung in die folgende Anweisung und Sie können den Index durchsuchen. select * from staff where birthdate < (to_date('01-MAY-82') + 0.9999);
Hinweis: Oracle verwendet weiterhin Indizes für MIN- und MAX-Funktionen.
Die Ungleichheitsoperation umfasst: a8093152e673feb7aba1828c43532094, !=, NOT colum >= ? , NICHT Spalte <= ?
Diese Einschränkung kann durch ODER ersetzt werden, zum Beispiel: Spalte a8093152e673feb7aba1828c43532094 0 ===>0 ODER Spalte<0
6 Zusammenführen mitSELECT emp_id, emp_m, salary_q ... FROM emp WHERE job='manager' AND deptno>10
job und deptno sind beide nicht eindeutige Indizes. Unter dieser Bedingung führt Oracle die Indizes nicht zusammen, sondern verwendet nur den ersten Index.
7. Vergleich nicht übereinstimmender Datentypen
dept_id ist ein varchar2-Feld. Es gibt einen Index für dieses Feld, aber die folgende Anweisung führt einen vollständigen Tabellenscan durch.
select * from dept where dept_id = 900198;
Das liegt daran, dass Oracle die where-Klausel automatisch in to_number(dept_id)=900198 umwandelt, was der Verwendung einer Funktion entspricht, die die Verwendung von Indizes einschränkt. Die richtige Schreibweise lautet wie folgt: select * from dept where dept_id = '900198';
Empfohlenes Tutorial: „
“
Das obige ist der detaillierte Inhalt vonWie macht Oracle den Index ungültig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!