Einfache Pläne
Die einfachsten Pläne bestehen nur aus einem Relationsnamen gefolgt von einer Abrufmethode.Zum Beispiel für eine unsortierte Einzeltabellenauswahl ohne WHERE
-Klausel:
select * from students
plan (students natural);
Erweiterter Plan:
Select Expression -> Table "STUDENTS" Full Scan
Wenn es eine WHERE
- oder eine HAVING
-Klausel gibt, können Sie den Index angeben, der für die Suche nach Übereinstimmungen verwendet werden soll:
select * from students
where class = '3C'
plan (students index (ix_stud_class));
Erweiterter Plan:
Select Expression -> Filter -> Table "STUDENTS" Access By ID -> Bitmap -> Index "IX_STUD_CLASS" Range Scan (full match)
Die Direktive INDEX
wird auch für Join-Bedingungen verwendet (wird etwas später besprochen).Es kann eine durch Kommas getrennte Liste von Indizes enthalten.
ORDER
gibt den Index zum Sortieren der Menge an, wenn eine ORDER BY
- oder GROUP BY
-Klausel vorhanden ist:
select * from students
plan (students order pk_students)
order by id;
Erweiterter plan:
Select Expression -> Table "STUDENTS" Access By ID -> Index "PK_STUDENTS" Full Scan
ORDER
und INDEX
können kombiniert werden:
select * from students
where class >= '3'
plan (students order pk_students index (ix_stud_class))
order by id;
Erweiterter Plan:
Select Expression -> Filter -> Table "STUDENTS" Access By ID -> Index "PK_STUDENTS" Full Scan -> Bitmap -> Index "IX_STUD_CLASS" Range Scan (lower bound: 1/1)
Es ist vollkommen in Ordnung, wenn ORDER
und INDEX
denselben Index angeben:
select * from students
where class >= '3'
plan (students order ix_stud_class index (ix_stud_class))
order by class;
Erweiterter Plan:
Select Expression -> Filter -> Table "STUDENTS" Access By ID -> Index "IX_STUD_CLASS" Range Scan (lower bound: 1/1) -> Bitmap -> Index "IX_STUD_CLASS" Range Scan (lower bound: 1/1)
Um Sets zu sortieren, wenn kein verwendbarer Index verfügbar ist (oder wenn Sie seine Verwendung unterdrücken möchten), lassen Sie ORDER
weg und stellen Sie dem Planausdruck SORT
voran:
select * from students
plan sort (students natural)
order by name;
Erweiterter Plan:
Select Expression -> Sort (record length: 128, key length: 56) -> Table "STUDENTS" Full Scan
Oder wenn ein Index für die Suche verwendet wird:
select * from students
where class >= '3'
plan sort (students index (ix_stud_class))
order by name;
Erweiterter Plan:
elect Expression -> Sort (record length: 136, key length: 56) -> Filter -> Table "STUDENTS" Access By ID -> Bitmap -> Index "IX_STUD_CLASS" Range Scan (lower bound: 1/1)
Beachten Sie, dass SORT
im Gegensatz zu ORDER
außerhalb der Klammern steht.Dies spiegelt die Tatsache wider, dass die Datenzeilen ungeordnet abgerufen und anschließend von der Engine sortiert werden.
Geben Sie bei der Auswahl aus einer Ansicht die Ansicht und die betreffende Tabelle an.Wenn Sie beispielsweise eine Ansicht FRESHMEN
haben, die nur die Erstsemester auswählt:
select * from freshmen
plan (freshmen students natural);
Erweiterter Plan:
Select Expression -> Table "STUDENTS" as "FRESHMEN" Full Scan
Oder zum Beispiel:
select * from freshmen
where id > 10
plan sort (freshmen students index (pk_students))
order by name desc;
Erweiterter Plan:
Select Expression -> Sort (record length: 144, key length: 24) -> Filter -> Table "STUDENTS" as "FRESHMEN" Access By ID -> Bitmap -> Index "PK_STUDENTS" Range Scan (lower bound: 1/1)
Important
|
Wenn eine Tabelle oder Ansicht mit einem Alias versehen wurde, muss der Alias, nicht der ursprüngliche Name, in der |