Qu'est-ce qu'un index en SQL?

441

Qu'est-ce qu'un index en SQL? Pouvez-vous expliquer ou faire référence à comprendre clairement?

Où dois-je utiliser un index?

Surya sasidhar
la source

Réponses:

378

Un index est utilisé pour accélérer la recherche dans la base de données. MySQL a une bonne documentation sur le sujet (qui est également valable pour d'autres serveurs SQL): http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

Un index peut être utilisé pour rechercher efficacement toutes les lignes correspondant à une colonne de votre requête, puis parcourir uniquement ce sous-ensemble de la table pour trouver des correspondances exactes. Si vous n'avez d'index sur aucune colonne de la WHEREclause, le SQLserveur doit parcourir toute la table et vérifier chaque ligne pour voir si elle correspond, ce qui peut être une opération lente sur les grandes tables.

L'index peut également être un UNIQUEindex, ce qui signifie que vous ne pouvez pas avoir de valeurs en double dans cette colonne, ou un PRIMARY KEYqui dans certains moteurs de stockage définit où dans le fichier de base de données la valeur est stockée.

Dans MySQL, vous pouvez utiliser EXPLAINdevant votre SELECTdéclaration pour voir si votre requête utilisera n'importe quel index. C'est un bon début pour résoudre les problèmes de performances. En savoir plus ici: http://dev.mysql.com/doc/refman/5.0/en/explain.html

Emil Vikström
la source
"L'index peut aussi être un index UNIQUE ..." Juste pour confirmer avec vous, cela signifie-t-il que l'index peut être non UNIQUE? J'ai toujours pensé que c'était UNIQUE. Je suis assez nouveau pour SQL, pardonnez-moi
Daniel Kurniadi
@DanielKurniadi La plupart des index ne sont pas uniques. Je pourrais avoir une base de données d'utilisateurs et souhaiter interroger tous ceux qui vivent à Göteborg. Un index sur le champ "ville" accélérerait ma requête. Mais il y a plus d'un utilisateur vivant à Göteborg, donc l'index doit être non unique.
Emil Vikström
175

Un index clusterisé est comme le contenu d'un annuaire téléphonique. Vous pouvez ouvrir le livre sur 'Hilditch, David' et trouver toutes les informations pour tous les 'Hilditch's juste à côté les uns des autres. Ici, les clés de l'index cluster sont (nom, prénom).

Cela rend les index en cluster parfaits pour récupérer de nombreuses données basées sur des requêtes basées sur une plage, car toutes les données sont situées les unes à côté des autres.

Étant donné que l'index cluster est en fait lié à la façon dont les données sont stockées, il n'y en a qu'un seul par table (bien que vous puissiez tricher pour simuler plusieurs index cluster).

Un index non clusterisé est différent en ce sens que vous pouvez en avoir plusieurs et qu'ils pointent ensuite vers les données de l'index cluster. Vous pourriez avoir, par exemple, un index non groupé à l'arrière d'un annuaire qui est saisi (ville, adresse)

Imaginez si vous deviez rechercher dans l'annuaire toutes les personnes qui vivent à `` Londres '' - avec uniquement l'index cluster, vous devriez rechercher chaque élément de l'annuaire car la clé de l'index cluster est activée (nom, prénom) et, par conséquent, les personnes vivant à Londres sont dispersées au hasard dans l’index.

Si vous avez un index non clusterisé sur (ville), ces requêtes peuvent être effectuées beaucoup plus rapidement.

J'espère que cela pourra aider!

Dave Hilditch
la source
151

Une très bonne analogie consiste à considérer un index de base de données comme un index dans un livre. Si vous avez un livre sur les pays et que vous recherchez l'Inde, alors pourquoi parcourir l'ensemble du livre - ce qui équivaut à une analyse complète de la table dans la terminologie de la base de données - alors que vous pouvez simplement accéder à l'index à l'arrière du livre, qui vous dira les pages exactes où vous pouvez trouver des informations sur l'Inde. De même, comme un index de livre contient un numéro de page, un index de base de données contient un pointeur vers la ligne contenant la valeur que vous recherchez dans votre SQL.

Plus ici

Arun Kumar M
la source
2
J'admire les gars expérimentés qui expliquent les choses en utilisant des "analogies". +1
snr
83

Un index est utilisé pour accélérer les performances des requêtes. Pour ce faire, il réduit le nombre de pages de données de base de données qui doivent être visitées / analysées.

Dans SQL Server, un index clusterisé détermine l'ordre physique des données dans une table. Il ne peut y avoir qu'un seul index cluster par table (l'index cluster EST la table). Tous les autres index d'une table sont appelés non groupés.

Blé Mitch
la source
49

Les index consistent à trouver rapidement des données .

Les index d'une base de données sont analogues aux index que vous trouvez dans un livre. Si un livre a un index, et je vous demande de trouver un chapitre dans ce livre, vous pouvez le trouver rapidement à l'aide de l'index. D'un autre côté, si le livre n'a pas d'index, vous devrez passer plus de temps à chercher le chapitre en regardant chaque page du début à la fin du livre.

De la même manière, les index d'une base de données peuvent aider les requêtes à trouver rapidement des données. Si vous êtes nouveau dans les index, les vidéos suivantes peuvent être très utiles. En fait, j'ai beaucoup appris d'eux.

Notions de base sur les index Index
clusterisés et non clusterisés Index
uniques et non uniques
Avantages et inconvénients des index

Suresh
la source
La lecture de toutes les réponses m'a fait me demander pourquoi ne pas tout indexer. +1 pour inclure le lien contenant les inconvénients.
Lakshay Garg
@LakshayGarg Parfois, une indexation inutile peut également ralentir le temps d'exécution de la requête, nous ne devons donc pas tout essayer. Tout comme chaque chose a ses avantages et ses inconvénients.
Gaurav Rajdeo
@LakshayGarg Gaurav Rajdeo a raison. Pour garder la même analogie: vous pouvez vouloir indexer chaque chapitre ou figure ou tableau d'un livre mais pas chaque paragraphe, phrase ou mot. Normalement, ce serait exagéré et entraînerait des complications inutiles. J'espère que cela est assez proche de l'image dessinée dans cette réponse.
colidyre
23

Eh bien dans l'index général est un B-tree. Il existe deux types d'index: clusterisés et non clusterisés.

L' index cluster crée un ordre physique de lignes (il ne peut s'agir que d'une seule et dans la plupart des cas, il s'agit également d'une clé primaire - si vous créez une clé primaire sur la table, vous créez également un index cluster sur cette table).

L' index non cluster est également un arbre binaire, mais il ne crée pas un ordre physique de lignes. Ainsi, les nœuds feuilles de l'index non cluster contiennent PK (s'il existe) ou index de ligne.

Les index sont utilisés pour augmenter la vitesse de recherche. Parce que la complexité est de O (log N). Les index est un sujet très vaste et intéressant. Je peux dire que créer des index sur une grande base de données est parfois une sorte d'art.

Voix
la source
6
en général, c'est un arbre b plutôt qu'un arbre binaire.
Mitch Wheat
ainsi, parce que les index utilisent des arbres auto-équilibrés, chaque fois que vous ajoutez / supprimez une ligne, elle s'équilibrera d'elle-même, ce qui rend l'insertion / la suppression plus coûteuse ... correct?
David Refaeli
20

INDEXES - pour trouver facilement des données

UNIQUE INDEX - les valeurs en double ne sont pas autorisées

Syntaxe pour INDEX

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

Syntaxe pour UNIQUE INDEX

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
RAGU
la source
13

Nous devons d'abord comprendre comment fonctionne la requête normale (sans indexation). Il traverse essentiellement chaque ligne une par une et lorsqu'il trouve les données qu'il renvoie. Reportez-vous à l'image suivante. (Cette image a été prise de cette vidéo .)

Sans indexation Supposons donc que la requête soit de trouver 50, il devra lire 49 enregistrements comme une recherche linéaire.

Reportez-vous à l'image suivante. (Cette image a été prise de cette vidéo )

entrez la description de l'image ici

Lorsque nous appliquons l'indexation, la requête trouvera rapidement les données sans lire chacune d'entre elles simplement en éliminant la moitié des données dans chaque parcours comme une recherche binaire. Les index mysql sont stockés sous forme d'arbre B où toutes les données sont dans le nœud feuille.

Kravi
la source
12

INDEX est une technique d'optimisation des performances qui accélère le processus de récupération des données. Il s'agit d'une structure de données persistante associée à une table (ou vue) afin d'augmenter les performances lors de la récupération des données de cette table (ou vue).

La recherche basée sur l'index est appliquée plus particulièrement lorsque vos requêtes incluent un filtre WHERE. Sinon, c'est-à-dire qu'une requête sans filtre WHERE sélectionne l'ensemble des données et du processus. La recherche d'une table entière sans INDEX s'appelle Table-scan.

Vous trouverez des informations précises sur les index Sql de manière claire et fiable: suivez ces liens:

  1. Pour une compréhension au niveau du cocnept: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Overview-and-Optimizations.html
  2. Pour une compréhension de l'implémentation: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Creation-Deletetion-Optimizations.html
nayeemDotNetAuthorities
la source
6

Un index est utilisé pour plusieurs raisons différentes. La raison principale est d'accélérer les requêtes afin que vous puissiez obtenir des lignes ou trier des lignes plus rapidement. Une autre raison est de définir une clé primaire ou un index unique qui garantira qu'aucune autre colonne n'a les mêmes valeurs.

Sensé
la source
6

Si vous utilisez SQL Server, l'une des meilleures ressources est sa propre documentation en ligne fournie avec l'installation! C'est la 1ère place à laquelle je ferais référence pour TOUTES les rubriques liées à SQL Server.

Si c'est pratique "comment dois-je faire?" genre de questions, alors StackOverflow serait un meilleur endroit à poser.

De plus, je ne suis pas revenu depuis un certain temps, mais sqlservercentral.com était l'un des meilleurs sites liés à SQL Server.

cloneofsnake
la source
0

Un index est un on-disk structure associated with a table or view that speeds retrieval of rows from the table or view. Un index contient des clés construites à partir d'une ou plusieurs colonnes de la table ou de la vue. Ces clés sont stockées dans une structure (arborescence B) qui permet à SQL Server de trouver la ou les lignes associées aux valeurs de clé rapidement et efficacement.

Indexes are automatically created when PRIMARY KEY and UNIQUE constraints are defined on table columns. For example, when you create a table with a UNIQUE constraint, Database Engine automatically creates a nonclustered index.

Si vous configurez une CLÉ PRIMAIRE, le moteur de base de données crée automatiquement un index cluster, sauf s'il existe déjà un index cluster. Lorsque vous essayez d'appliquer une contrainte PRIMARY KEY sur une table existante et qu'un index cluster existe déjà sur cette table, SQL Server applique la clé primaire à l'aide d'un index non cluster.

Veuillez vous y référer pour plus d'informations sur les index (cluster et non cluster): https://docs.microsoft.com/en-us/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described?view= sql-server-ver15

J'espère que cela t'aides!

adSad
la source