web-dev-qa-db-fra.com

Qu'est-ce qu'un index de base de données?

J'en ai entendu parler depuis que j'ai commencé à travailler dans la technologie il y a environ 18 mois. Je sais qu'ils améliorent potentiellement les performances, et ils semblent être spécifiques aux colonnes - ("Nous indexons la table User sur la colonne date_of_birth").

Je cherche juste un aperçu rapide de ce qu'ils sont exactement, à quoi ils servent et comment ils fonctionnent.

51
Clay Wardell

J'ai écrit un livre complet à ce sujet! Il est également disponible gratuitement sur le web: http://use-the-index-luke.com/

J'essaie de répondre à vos questions sous peu - ce qui n'est pas exactement mon domaine. La dernière fois que j'ai essayé, j'ai fini par écrire un livre ...

Comme les tables, les index sont constitués de lignes et de colonnes, mais stockent les données de manière logique pour améliorer les performances de recherche. Pensez-y comme un annuaire téléphonique (imprimé). Ils sont généralement triés last_name, first_name et éventuellement d'autres critères (par exemple, le code postal). Ce tri permet de retrouver rapidement toutes les entrées d'un nom spécifique. Si vous connaissez également le prénom, vous pouvez même trouver très rapidement les entrées pour la combinaison nom/prénom.

Si vous ne connaissez que le prénom, l'annuaire téléphonique ne vous aide pas vraiment. Il en va de même pour les index de base de données multi-colonnes. Alors oui, un index peut potentiellement améliorer les performances de recherche. Si vous n'avez pas le bon index pour votre question (par exemple, un répertoire téléphonique lors de la recherche par prénom), ils pourraient être inutiles.

Vous pouvez avoir plusieurs index sur la même table mais sur différentes colonnes. Donc, un index sur last_name, first_name est différent d'un index sur first_name uniquement (dont vous auriez besoin pour optimiser les recherches par prénom).

Les index contiennent des données redondantes (ex: index clusterisés = répertoire téléphonique). Ils ont les mêmes informations que celles stockées dans la table (ex: index basés sur la fonction ), mais de manière triée. Cette redondance est automatiquement maintenue par la base de données pour chaque opération d'écriture que vous effectuez ( insérer/mettre à jour/supprimer ). Par conséquent, les performances d'écriture indexées diminuent .

Outre la recherche rapide de données, les index peuvent également être utilisés pour optimiser opérations de tri (order by) et organiser physiquement les données liées étroitement ( clustering ).

Pour avoir une meilleure idée, regardez la table des matières complète de mon livre: http://use-the-index-luke.com/sql/table-of-contents

74
Markus Winand

Considérez-le comme une table des matières pour les tableaux. Si c'est le cas, la base de données sait où chercher plus précisément. Si ce n'est pas le cas, la base de données doit parcourir toutes les données pour la trouver.

Une explication plus détaillée peut être trouvée ici dans cet article Wikipedia .

11
Bjoern

Un index de base de données est une infrastructure de données visant à améliorer la complexité temporelle de l'opération de recherche.

La recherche sans index est dans le pire des cas O(N) complexité. Une recherche efficace avec index permet la complexité logarithmique de O(log(N)) ou même avec une certaine complexité architecturale O(1).

Un index de base de données permet également d'imposer des contraintes de base de données. De nombreux systèmes de base de données définissent un index sur un ensemble de colonnes appelées PRIMARY KEY. Certains systèmes DB nécessitent des colonnes dans un FOREIGN KEY à indexer, afin d'accélérer les opérations (insertion, mise à jour).

10
kiriloff

Un index est une structure facultative, associée à une table ou un cluster de tables, qui peut parfois accélérer l'accès aux données. En créant un index sur une ou plusieurs colonnes d'une table, vous gagnez la possibilité dans certains cas de récupérer un petit ensemble de lignes distribuées de façon aléatoire dans la table. Les index sont l'un des nombreux moyens de réduire les E/S disque.

Si une table organisée en segments n'a pas d'index, la base de données doit effectuer une analyse complète de la table pour trouver une valeur. Par exemple, sans index, une requête de l'emplacement 2700 dans la table hr.departments nécessite que la base de données recherche chaque ligne de chaque bloc de table pour cette valeur. Cette approche ne s'adapte pas bien à mesure que les volumes de données augmentent.

http://docs.Oracle.com/cd/E11882_01/server.112/e10713/indexiot.htm

6
Pamma

Il a un thread très similaire qui s'exécute ici . Vérifiez, c'est utile.

Je sais qu'ils améliorent potentiellement les performances

Oui c'est vrai. Mais, gardez cela à l'esprit, parfois l'indexation peut également être la raison de PAUVRE Performance . Exemple: indexer toutes les colonnes d'une base de données affectera sans aucun doute les performances.

5
Mayukh Roy