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.