Bonjour à tous,
J'ai parcouru et lu pas mal de documentation sur les index que je connaissais assez basiquement.
J'ai besoin de votre aide pour la problématique suivante :
J'ai une base de données SQL Sever 2008 R2 contenant une dizaine de tables de "référence" sans aucune relation existantes entre elles.
Ces tables sont pour le moment simplement constituées d'une clé primaire int en identity true auto incrémentée et d'un index auto généré sur cette PK. (pour info : ces tables servent pour un chargement ETL).
Il y a également un trigger on before delete permettant d'historiser les lignes supprimées (donc traitées) dans une autre table historique purgée à fréquence régulière.
Ces tables peuvent être assez volumineuse : plusieurs millions de records
Je cherche à rester dans les best practice d'implémentation de ce genre de base de données, et j'aimerai donc ajouter des index sur ces tables par rapport aux différentes procédure stockées qui pointent dessus.
Ma question est :
Si j'ai 6 requêtes différentes efféctuant un select avec une clause where contenant la combinaison de plusieurs champs : ex :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SELECT FIELD1, FIELD2, FIELD3, FILEDN, ... FROM TABLE1 WHERE FIELD1 = "test" SELECT FIELD1, FIELD2, FILEDN, ... FROM TABLE1 WHERE FIELD1 = "test" AND FIELD2 = "test2" SELECT FIELD1, FIELD2, FILEDN, ... FROM TABLE1 WHERE FIELD1 = "test" AND FIELD3 = "test3" ETC...
Dans ce cas, dois je créer les index suivant :
- INDEX CLUSTER ASC FIELD1
- INDEX CLUSTER ASC FIELD1, ASC FIELD2
- INDEX CLUSTER ASC FIELD1, ASC FIELD3
Donc en clair, dois-je créer un index pour toutes les combinaisons de requête que j'estime importante ? Cela ne risque pas d'etre contre performant ? Et au niveau du storage ?
Merci d'avance pour vos lumières !!
Hiken.
Partager