Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 11383|Répondre: 0

[Communication] SQL Server Composite Index Learning

[Copié le lien]
Publié sur 29/01/2015 13:06:03 | | |

Aperçu
Qu’est-ce qu’un indice unique et qu’est-ce qu’un indice composite ? Quand créer un nouvel indice composite, et à quoi dois-je faire attention dans cet indice composite ? Cet article est principalement un résumé de quelques discussions sur Internet.

Un. Concept

Un seul index est une situation où l’index est listé dans une seule colonne, c’est-à-dire que l’instruction de création d’un nouvel index est implémentée sur une seule colonne.

Les utilisateurs peuvent créer des index sur plusieurs colonnes, appelés index composites (index combinés). Les index composites sont créés exactement de la même manière que les index simples. Mais les index composites nécessitent moins de surcharge lors des opérations de base de données et peuvent remplacer plusieurs index uniques. Lorsque le nombre de lignes dans une table est bien supérieur au nombre de clés, cette méthode peut considérablement accélérer la vitesse de requête de la table.

Il existe deux concepts en même temps : les index étroits et les index larges, les indices étroits désignent des indices comportant 1 à 2 colonnes, et désignent généralement un seul index sauf indication contraire. Un index large est un indice comportant plus de 2 colonnes.

Un principe important de la conception des indices est d’utiliser des indices étroits plutôt que larges, car les indices étroits ont tendance à être plus efficaces que les indices combinés. Avoir des indices plus étroits donnera plus de choix à l’optimiseur, ce qui aide souvent à améliorer les performances.

Deux. Utilisation

Créez un index
Créer l’indice IDX1 sur le tableau1(col1,col2,col3)  
Demander
select * du tableau1 où col1 = A et col2 = B et col3 = C

À ce moment-là, l’optimiseur de requête ne scanne pas la table, mais prend directement les données de l’index, car il y a ces données dans l’index, appelées requêtes superposées, et la vitesse de requête est très rapide.   

Trois. Notes :

1. Quand utiliser un indice composé
Dans la condition where, le champ est indexé, et si plusieurs champs sont utilisés, un indice composite est utilisé. En général, ne construisez aucun index dans le champ select (si vous souhaitez interroger select col1, col2, col3 depuis mytable, vous n’avez pas besoin de l’index ci-dessus). L’indexation basée sur les conditions est un principe extrêmement important. Faites attention à ne pas utiliser trop d’index, sinon cela aura un grand impact sur l’efficacité des mises à jour des tables, car il faut passer beaucoup de temps à créer des index lors de l’exploitation des tables.

2. Pour les index composites, lorsqu’on utilise la requête, il est préférable de suivre l’ordre de recherche des index, qui est le plus efficace. Par exemple :  
  IDX1 :create index idx1 sur table1(col2,col3,col5)  
  select * dans le tableau1 où col2=A et col3=B et col5=D  

Si c’est « sélectionnez * dans le tableau1 où col3=B et col2=A et col5=D »
Ou « sélectionner * dans le tableau1 où col3=B » n’utilisera pas l’index, ou l’effet n’est pas perceptible

3. Un indice composite remplacera-t-il un seul indice ?
Beaucoup pensent que l’ajout de n’importe quel champ à l’index regroupé peut améliorer la vitesse des requêtes, mais certains sont confus : si les champs d’index composés en grappe sont interrogés séparément, la vitesse de requête sera-t-elle ralentie ? Avec cette question, examinons la vitesse de requête suivante (le résultat est de 250 000 données) :( colonne date fariqi se classe première dans la colonne de départ de l’indice d’agrégation composite, et le nom d’utilisateur neibuyonghu arrive deuxième)

IDX1:create   index   idx1   on   Tgongwen(fariqi,neibuyonghu)  

(1) sélectionner Gid, Fariqi, Neibuyonghu, titre de Tgongwen
où Fariqi>'2004-5-5'

Vitesse de requête : 2513 ms

(2) sélectionner gid, fariqi, neibuyonghu, titre de Tgongwen
où Fariqi>'2004-5-5' et Neibuyonghu='Bureau'

Vitesse de requête : 2516 ms

(3) sélectionner gid, fariqi, neibuyonghu, titre de Tgongwen
où neibuyonghu='bureau'

Vitesse de requête : 60280 millisecondes

D’après les expériences ci-dessus, on peut voir que si seule la colonne de départ de l’index regroupé est utilisée comme condition de requête, la vitesse de requête de toutes les colonnes avec l’index composite regroupé est presque la même, voire légèrement plus rapide qu’en utilisant toutes les colonnes d’index composites (lorsque le nombre d’ensembles de résultats de requêtes est le même). Si seules les colonnes non départes de l’index composé agrégé sont utilisées comme conditions de requête, cet index ne servira à rien. Bien sûr, la vitesse de requête des instructions 1 et 2 est la même car le nombre d’entrées dans la requête est le même ; si toutes les colonnes de l’index composite sont utilisées et que les résultats de requête sont peu nombreux, cela formera un « override d’index », afin d’optimiser les performances. Gardez aussi à l’esprit que, que vous utilisiez fréquemment d’autres colonnes dans l’index agrégé, la colonne de départ doit être celle qui est la plus utilisée.

[Réf. : Algorithme d’optimisation des requêtes et d’algorithme de pagination http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]

4. Dois-je créer un seul index et un index composite sur la même colonne en même temps ?
Expérience : tableau Sysbase 5.0 table1 champs : col1, col2, col3  

Étapes du test :  
(1) Créer l’indice IDX1 sur col1  
  Exécuter select * à partir du tableau1 où col1=A utilise idx1  
  Exécuter select * à partir du tableau1 où col1=A et col2=B utilisent également idx1  

(2) Supprimez l’indice idx1, puis créez un indice composite (col1,col2)  
  Les deux requêtes utilisent idx2  

(3) Si les deux indices idx1 et idx2 existent  
  Ce n’est pas là où col1='A' utilise idx1 ; où col1=A et col2=B utilisent idx2.  
  Son optimiseur de requêtes utilise l’un des indices précédemment couramment utilisés. Utilise soit idx1, soit idx2.  
   
On peut voir que
(1) Pour un tableau, s’il existe un indice composé sur (col1, col2), il n’est pas nécessaire de créer un seul indice sur col1 en même temps.
(2) Si les conditions de requête l’exigent, vous pouvez ajouter l’indice composé sur (col1, col2) alors qu’il existe déjà un seul indice sur col1, ce qui peut améliorer l’efficacité dans une certaine mesure.
(3) Il n’y a pas beaucoup d’avantages à établir un indice composite avec plusieurs champs (contenant 5 ou 6 champs) en même temps, relativement parlant, établir un indice avec plusieurs champs étroits (contenant un seul, ou au maximum deux champs) peut atteindre une meilleure efficacité et flexibilité.



5. Dois-je répondre à la question ?
Il est généralement préférable de ne pas adopter une stratégie qui met l’accent sur une couverture complète des requêtes. Si toutes les colonnes de la clause Select sont écrasées par un index non regroupé, l’optimiseur le reconnaîtra et fournira de bonnes performances. Cependant, cela entraîne souvent un indice trop large et une dépendance excessive à la probabilité que l’optimiseur utilise la politique. En général, les index étroits sont utilisés pour un plus grand nombre de requêtes, ce qui offre de meilleures performances pour les requêtes importantes.




Précédent:C# winform empêche l’injection SQL
Prochain:Codes d’erreur et solutions Dell Server Édition 2013
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com