Oracle
 sql >> Base de données >  >> RDS >> Oracle

Rejoindre prend trop de temps

En regardant tous les champs impliqués, un index de couverture sur chaque table impliquerait plusieurs colonnes

t1: Y, F, H, A
t2: X, G, C, D, E

Quel est le degré de sélectivité de TOUS les critères :t2.X, t2.G ou t1.Y, t1.F, t1.H ?

Si aucune des colonnes individuelles n'est suffisamment sélective (idéalement 0,5 % ou moins), vous pouvez créer un ou plusieurs index de couverture impliquant plusieurs colonnes, par exemple

t2 (G, X)
t1 (H, F, Y)

Remarque : L'ordre des colonnes dans un index est très important - placez toujours la plus sélective (celle qui divise les données de colonne en ensembles les plus distincts) en premier.

Au détriment du stockage, vous pouvez faire en sorte que l'index COVER la requête en fournissant toutes les colonnes nécessaires dans l'index lui-même. Cela signifie que la requête n'a pas du tout besoin de revenir aux données de la table.

create index ix_t2 on t2 (G,X) INCLUDE (C,D,E)
create index ix_t1 on t1 (H,F,Y) INCLUDE (A)

MODIFIER

On dirait que j'ai glissé un SQL Server DDL là-dedans. Dans Oracle, vous devriez développer l'index pour devenir t2 (G,X, C,D,E) - mais cela augmente les exigences de sélectivité pour l'utilisation de l'index car la clé d'index devient très longue.