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. |