Nous avons une table appelée table1
...SQL Performance Index
(c1 int indentity,c2 datetime not null,c3 varchar(50) not null,
c4 varchar(50) not null,c5 int not null,c6 int ,c7 int)
on column c1 is primary key(clusterd Index)
on column c2 is index_2(Nonclusterd)
on column c3 is index_2(Nonclusterd)
on column c4 is index_2(Nonclusterd)
on column c5 is index_2(Nonclusterd)
Il contient 10 millions de disques. Nous avons plusieurs procédures pointant vers « table1 » avec différents critères de recherche:
select from table1 where c1=blah..and c2= blah.. and c3=blah..
select from table1 where c2=blah..and c3= blah.. and c4=blah..
select from table1 where c1=blah..and c3= blah.. and c5=blah..
select from table1 where c1=blah..
select from table1 where c2=blah..
select from table1 where c3=blah..
select from table1 where c4=blah..
select from table1 where c5=blah..
Quelle est la meilleure façon de créer un index non-cluster à part ci-dessus, ou de modifier les index existants pour obtenir une bonne performance de l'indice et de réduire le temps d'exécution ?
Dans vos exemples de requête, tous les prédicats sont des tests d'égalité d'une colonne à une seule valeur. Et plusieurs prédicats sont toujours combinés avec un opérateur AND. Je confirme juste que c'est le cas. Que vos requêtes n'utilisent pas les prédicats LIKE ou les opérateurs OU ou les références de colonne enveloppantes dans les fonctions. – spencer7593
Qu'en est-il de la clause select? Toujours le même nombre de colonnes? – gbn
La façon dont vous avez exprimé vos index est un peu déroutante - dites-vous que vous avez deux index (un en cluster sur c1, un en cluster sur c2, c3, c4, c5), ou dites-vous que vous avez 5 indices (un cluster sur c1, un non-cluster sur chacun de c2, c3, c4, c5)? –