Des plans simples
Les plans les plus simples se composent uniquement d’un nom de table et de la méthode d’extraction suivante. Par exemple, pour une sélection non triée à partir d’une seule table sans clause WHERE
:
SELECT * FROM students
PLAN (students NATURAL)
Plan sous forme EXPLAIN:
Select Expression -> Table "STUDENTS" Full Scan
S’il y a une clause `WHERE', vous pouvez spécifier l’index à utiliser pour trouver des correspondances :
SELECT *
FROM students
WHERE class = '3C'
PLAN (students INDEX (ix_stud_class))
Plan sous forme EXPLAIN:
Select Expression -> Filter -> Table "STUDENTS" Access By ID -> Bitmap -> Index "IX_STUD_CLASS" Range Scan (full match)
La directive INDEX
peut également être utilisée pour les conditions de connexion (qui seront discutées plus tard). Il contient une liste d’index séparés par des virgules.
La directive ORDER
spécifie l’index qui est utilisé pour trier le jeu de données si les clause ORDER BY
ou GROUP BY
sont présentes :
SELECT *
FROM students
PLAN (students ORDER pk_students)
ORDER BY id
Plan sous forme EXPLAIN:
Select Expression -> Table "STUDENTS" Access By ID -> Index "PK_STUDENTS" Full Scan
Les instructions ORDER
et INDEX
peuvent être combinées :
SELECT *
FROM students
WHERE class >= '3'
PLAN (students ORDER pk_students INDEX (ix_stud_class))
ORDER BY id
Plan sous forme d’EXPLAIN :Plan sous forme d’EXPLAIN :
Select Expression -> Filter -> Table "STUDENTS" Access By ID -> Index "PK_STUDENTS" Full Scan -> Bitmap -> Index "IX_STUD_CLASS" Range Scan (lower bound: 1/1)
Les instructions ORDER
et INDEX
sont autorisées à spécifier le même index :
SELECT *
FROM students
WHERE class >= '3'
PLAN (students ORDER ix_stud_class INDEX (ix_stud_class))
ORDER BY class
Plan sous forme d’EXPLAIN :
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)
Pour trier des ensembles de données lorsqu’un index ne peut pas être utilisé (ou que vous souhaitez supprimer son utilisation), supprimez l’instruction ORDER
et faites précéder l’expression du plan de l’instruction SORT
:
SELECT *
FROM students
PLAN SORT (students NATURAL)
ORDER BY name
Plan sous forme d’EXPLAIN :
Select Expression -> Sort (record length: 128, key length: 56) -> Table "STUDENTS" Full Scan
Ou lorsque l’index est utilisé pour la recherche :
SELECT *
FROM students
WHERE class >= '3'
PLAN SORT (students INDEX (ix_stud_class))
ORDER BY name
Plan sous forme d’EXPLAIN :
Select 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)
Notez que l’instruction SORT
, contrairement à ORDER
, est en dehors des parenthèses, ce qui reflète le fait que les lignes de données sont récupérées sans être triées et triées plus tard.
Lors d’une extraction à partir d’une vue, la vue elle-même et la table participante sont spécifiées. Par exemple, si vous avez une vue FRESHMEN
qui ne sélectionne que les étudiants de première année :
SELECT *
FROM freshmen
PLAN (freshmen students NATURAL)
Plan sous forme d’EXPLAIN:
Select Expression -> Table "STUDENTS" as "FRESHMEN" Full Scan
Ou, par exemple.:
SELECT *
FROM freshmen
WHERE id > 10
PLAN SORT (freshmen students INDEX (pk_students))
ORDER BY name DESC
Plan sous forme d’EXPLAIN:
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)
Remarque : si vous avez attribué un alias à une table ou à une vue, vous devez utiliser l’alias, et non le nom original, dans la clause PLAN
.