web-dev-qa-db-fra.com

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

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

Où devrais-je utiliser un index?

392
Surya sasidhar

Un index est utilisé pour accélérer la recherche dans la base de données. MySQL possède une bonne documentation sur le sujet (qui concerne également 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 rechercher des correspondances exactes. Si vous n'avez d'index sur aucune colonne de la clause WHERE, le serveur SQL doit parcourir l'intégralité de la table et vérifiez chaque ligne pour voir si elle correspond, ce qui peut être une opération lente sur de grandes tables.

L'index peut également être un index UNIQUE, ce qui signifie que vous ne pouvez pas avoir de valeurs dupliquées dans cette colonne, ou un PRIMARY KEY qui, dans certains moteurs de stockage, définit l'emplacement de stockage de la valeur dans le fichier de base de données.

Dans MySQL, vous pouvez utiliser EXPLAIN devant votre instruction SELECT pour voir si votre requête utilisera un 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

334
Emil Vikström

Un index en cluster ressemble au contenu d'un annuaire téléphonique. Vous pouvez ouvrir le livre dans "Hilditch, David" et trouver toutes les informations relatives à tous les "Hilditch" l'un à côté de l'autre. Ici, les clés pour l'index clusterisé sont (nom, prénom).

Cela rend les index clusterisés très utiles pour extraire de nombreuses données en fonction de requêtes basées sur des plages, car toutes les données sont situées les unes à côté des autres.

Comme l'index en cluster est en fait lié à la manière dont les données sont stockées, il n'y en a qu'un seul possible par table (bien que vous puissiez tricher pour simuler plusieurs index en cluster).

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

Imaginez que si vous deviez rechercher dans l'annuaire toutes les personnes qui habitent "Londres" - avec uniquement l'index clusterisé, vous devrez rechercher chaque élément de l'annuaire téléphonique puisque la clé de l'index cluster est activée (nom, ainsi, les habitants de Londres sont dispersés au hasard dans l’index.

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

J'espère que ça t'as aidé!

162
Dave Hilditch

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 concernant des pays et que vous recherchez l'Inde, pourquoi voudriez-vous parcourir le livre en entier - ce qui équivaut à une analyse complète du tableau dans la terminologie de la base de données - alors que vous pouvez simplement aller à l'index à la fin du document? livre, qui vous indiquera 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 sur la ligne contenant la valeur que vous recherchez dans votre code SQL.

Plus ici

139
Arun Kumar M

Un index est utilisé pour accélérer les performances des requêtes. Cela se fait en réduisant le nombre de pages de données de base de données devant être visitées/numérisées.

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

81
Mitch Wheat

Les index permettent de 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 que 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 ne comporte pas d'index, vous devrez passer plus de temps à chercher le chapitre en consultant 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 débutez dans les index, les vidéos suivantes peuvent être très utiles. En fait, j'ai beaucoup appris d'eux.

bases de l'index
Index clusterisés et non clusterisés
Index uniques et non uniques
Avantages et inconvénients des index

46
Suresh

En général, l'index est un B-tree. Il existe deux types d'index: en cluster et non en cluster.

Clustered index crée un ordre physique de lignes (il peut s'agir 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 une table, vous créez également un index cluster sur cette table).

Nonclustered index est également un arbre binaire, mais il ne crée pas un ordre physique de lignes. Ainsi, les nœuds terminaux de l'index non clusterisé contiennent PK (s'il existe) ou un 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 sont un sujet très vaste et intéressant. Je peux dire que la création d'index sur une base de données volumineuse est parfois un art.

23
Voice

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);
20
RAGU

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 une vue) afin d'améliorer les performances lors de l'extraction des données de cette table (ou de cette vue).

La recherche par index s’applique plus particulièrement lorsque vos requêtes incluent le filtre WHERE. Autrement, c’est-à-dire qu’une requête sans filtre WHERE sélectionne l’ensemble des données et la traite. Rechercher une table entière sans INDEX s'appelle Table-scan.

Vous trouverez des informations exactes sur les index SQL de manière claire et fiable: suivez ces liens:

  1. Pour une compréhension à la noix de coco: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Overview-and-Optimizations.html
  2. Pour la compréhension de la mise en œuvre: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Creation-Deletetion-Optimizations.html
12

Nous devons d’abord comprendre comment une requête normale (sans index) s’exécute. En gros, il parcourt 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 .)

Without indexing Donc, supposons que la requête consiste à trouver 50, il devra lire 49 enregistrements sous forme de recherche linéaire.

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

enter image description here

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

11
Kravi

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 me référerais pour TOUT sujet relatif à SQL Server.

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

De plus, je n'y suis pas retourné depuis un moment, mais sqlservercentral.com était l'un des meilleurs sites liés à SQL Server.

7
cloneofsnake

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

6
Senseful

L'indexation est un moyen de trier un certain nombre d'enregistrements sur plusieurs champs. La création d'un index sur un champ dans une table crée une autre structure de données qui contient la valeur du champ et un pointeur sur l'enregistrement auquel elle se rapporte. Cette structure d'index est ensuite triée, ce qui permet d'effectuer des recherches binaires.

Vous pouvez voir plus sur l'indexation SQL ici

1
Ajmal M.P.