Comment les index de base de données Comment fonctionnent les index de base de données de travail Interview du programmeur et logiciel

Commençons notre tutoriel et une explication des raisons pour lesquelles vous auriez besoin d'un index de base de données en passant par un exemple très simple. Supposons que nous avons une table de base de données appelée employés avec trois colonnes - EMPLOYEE_NAME, Employee_Age et Employee_Address. Supposons que la table des employés a des milliers de lignes.







Que se passerait-il sans un index sur la table?

Une fois que nous courons cette requête, ce qui se passe exactement dans les coulisses pour trouver des employés qui sont le nom de Jésus? Eh bien, le logiciel de base de données devrait littéralement regarder chaque ligne unique dans la table des employés pour voir si le EMPLOYEE_NAME pour cette ligne est « Jésus. Et, parce que nous voulons que chaque ligne avec le nom « Jésus à l'intérieur, nous ne pouvons pas arrêter tout simplement regarder une fois que nous venons de trouver une ligne avec le nom « Jésus, car il pourrait y avoir d'autres lignes avec le nom de Jésus. Ainsi, chaque ligne jusqu'à la dernière ligne doit être recherchée - ce qui signifie des milliers de lignes dans ce scénario devra être examiné par la base de données pour trouver les lignes avec le nom « Jésus. C'est ce qu'on appelle un scan de table.

Comment un indice de base de données peut améliorer les performances

Qu'est-ce qu'un indice?

Alors, quel est un indice? Eh bien, un indice est une structure de données (le plus souvent un arbre B) qui stocke les valeurs d'une colonne spécifique dans une table. Un index est créé sur une colonne d'une table. Ainsi, les principaux points à retenir sont qu'un indice est composé des valeurs de colonne d'une table, et que ces valeurs sont stockées dans une structure de données. L'indice est une structure de données - rappelez-vous que.

Quel type de structure de données est un index?

B- arbres sont les données les plus couramment utilisées structures pour les index. La raison pour laquelle les arbres B- sont les plus populaires structure de données pour les index est dû au fait qu'ils sont efficace du temps - car look-ups, des suppressions et des insertions peuvent tous être effectués en temps logarithmique. Et, une autre raison majeure des arbres B- sont utilisés plus souvent parce que les données qui sont stockées à l'intérieur de l'arbre B peut être triée. Le SGBDR détermine généralement la structure des données qui est effectivement utilisée pour un index. Mais, dans certains scénarios avec certains SGBDR de, vous pouvez spécifier réellement quelle structure les données que vous voulez que votre base de données à utiliser lors de la création de l'indice lui-même.

Comment fonctionne un index de table de hachage?

Les inconvénients d'un indice de hachage

Les tables de hachage sont des structures de données notsorted, et il existe de nombreux types de requêtes qui index de hachage ne peuvent même aider. Par exemple, supposons que vous voulez savoir tous les employés qui sont âgés de moins de 40 ans. Comment pourriez-vous faire avec un index de table de hachage? Eh bien, il est impossible car une table de hachage est seulement bon pour rechercher des paires de valeurs clés - ce qui signifie requêtes qui vérifient pour l'égalité (comme « WHERE nom = « Jésus »). Ce qui est implicite dans le mappage de valeur clé dans une table de hachage est le concept que les clés d'une table de hachage ne sont pas triés ou stockés dans un ordre particulier. C'est pourquoi les index de hachage ne sont généralement pas le type par défaut de la structure de données utilisées par les index de base de données - parce qu'ils ne sont pas aussi flexibles que B- arbres lorsqu'il est utilisé comme la structure de données d'index. Voir aussi: arbres binaires par rapport aux tables de hachage.

Quels sont les autres types d'indices?

Les indices qui utilisent une structure de données d'arbre R sont couramment utilisés pour aider à des problèmes spatiaux. Par exemple, une requête comme « Trouver tous les Starbucks à 2 kilomètres de moi » serait le type de requête qui pourrait montrer des performances accrues si la table de base de données utilise un index d'arborescence R.

Un autre type d'index est un index bitmap, qui fonctionnent bien sur des colonnes qui contiennent des valeurs booléennes (comme vrai et faux), mais de nombreux cas de ces valeurs - essentiellement des colonnes avec une faible sélectivité.

Comment un indice d'améliorer les performances?

Parce qu'un indice est essentiellement une structure de données qui est utilisée pour stocker des valeurs de colonnes, regardant ces valeurs devient beaucoup plus rapide. Et, si un index utilise le plus couramment utilisé type de structure de données - un arbre B- - alors la structure de données est également triée. Avoir les valeurs de la colonne trier peut être une amélioration de la performance majeure - lire la suite pour savoir pourquoi.







Disons que nous créons un indice d'arbre B sur la colonne EMPLOYEE_NAME Cela signifie que lorsque nous cherchons des employés nommés « Jésus » en utilisant le SQL, nous avons montré plus haut, l'ensemble de la table des employés ne doit pas être recherché pour trouver des employés nommés « Jésus ». Au lieu de cela, la base de données utilisera l'index pour trouver des employés le nom de Jésus, parce que l'indice sera vraisemblablement triée par ordre alphabétique par le nom de l'employé. Et, parce qu'il est trié, cela signifie la recherche d'un nom est beaucoup plus rapide parce que tous les noms commençant par un « J » sera juste à côté de l'autre dans l'indice! Il est également important de noter que l'indice stocke également des pointeurs vers la ligne de table afin que d'autres valeurs de la colonne peuvent être récupérées - lire pour plus de détails à ce sujet.

Quelle est exactement à l'intérieur d'un index de base de données?

Donc, maintenant vous savez qu'un index de base de données est créée sur une colonne dans une table, et que l'indice stocke les valeurs dans cette colonne spécifique. Mais, il est important de comprendre qu'un index de base de données ne stocke pas les valeurs dans les autres colonnes de la même table. Par exemple, si nous créons un index sur la colonne EMPLOYEE_NAME, cela signifie que les valeurs de la colonne Employee_Age et Employee_Address ne sont pas également stockées dans l'index. Si nous ne stockons que toutes les autres colonnes de l'index, alors il serait tout comme la création d'une autre copie de toute la table - qui prendrait de l'espace beaucoup trop et serait très inefficace.

Un index stocke également un pointeur vers la ligne de table

Donc, la question est de savoir si la valeur que nous cherchons se trouve dans un index (comme « Jésus). comment il trouve les autres valeurs qui sont dans la même rangée (comme l'adresse de Jésus et de son âge)? Eh bien, il est très simple - les index de base de données stockent également des pointeurs vers les lignes correspondantes dans la table. Un pointeur est simplement une référence à un endroit dans la mémoire où les données de ligne sont stockées sur le disque. Ainsi, en plus de la valeur de la colonne qui est stockée dans l'index, un pointeur vers la ligne de la table où cette valeur vit est également stockée dans l'index. Cela signifie que l'une des valeurs (ou noeuds) dans l'index pour un EMPLOYEE_NAME pourrait être quelque chose comme ( « Jésus », 0x82829), où 0x82829 est l'adresse sur le disque (le pointeur) où les données de ligne pour « Jésus » est stocké . Sans ce pointeur tout ce que vous auriez est une valeur unique, qui serait vide de sens parce que vous ne seriez pas en mesure de récupérer les autres valeurs dans la même ligne - comme l'adresse et l'âge d'un employé.

Comment une base de données de savoir quand utiliser un index?

Pouvez-vous forcer la base de données à utiliser un index sur une requête?

Comment créer un index dans SQL:

Voici ce que le SQL réelle ressembleraient pour créer un index sur la colonne EMPLOYEE_NAME de notre exemple précédent:

Comment créer un index à plusieurs colonnes dans SQL:

On pourrait aussi créer un index sur deux des colonnes dans la table des employés. comme indiqué dans ce SQL:

Qu'est-ce qu'une bonne analogie pour un index de base de données?

Une très bonne analogie est de penser à un indice de base de données comme un index dans un livre. Si vous avez un livre sur les chiens et que vous recherchez la section sur les Golden Retrievers, alors pourquoi vous feuilletez le livre entier - qui est l'équivalent d'une analyse complète de la table dans la base terminologique - quand vous pouvez aller à l'index à le dos du livre, qui vous indiquera les pages exactes où vous pouvez trouver des informations sur les Golden Retrievers. De même, comme un indice 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 SQL.

Quel est le coût d'avoir un indice de base de données?

Alors, quelles sont quelques-uns des inconvénients d'avoir un indice de base de données? Eh bien, pour une chose, il prend de la place - et plus votre table, plus votre index. Un autre coup de performance avec des indices est le fait que chaque fois que vous ajoutez, supprimez ou les lignes de mise à jour dans la table correspondante, les mêmes opérations devront faire à votre index. Rappelez-vous qu'un index doit contenir le même jusqu'à les données minute que tout ce qui est dans la colonne de table (s) que l'indice couvre.

En règle générale, un indice ne doit être créé sur une table si les données de la colonne indexée seront interrogés fréquemment.

En effet, une très claire et à l'explication du point.

J'ai une question dans la section « Comment une base de données de savoir quand utiliser un index? ».
Supposons que je utilise une requête comme

Select * from employés où employee_age> 30 et EMPLOYEE_NAME = « Jésus »

Est-il encore utiliser l'index fait pour EMPLOYEE_NAME comme ayant employee_age> 30 condition dans la clause where ou l'index ne seront utilisées que quand il n'y a que EMPLOYEE_NAME condition dans la clause where?

Merci - Cordialement,
Shriyansh Dhariwal

L'homme, qui était vraiment bonne explication. Merci beaucoup! # 128512;

J'aime les concepts de façon sont expliqués ici :-)

Merci beaucoup. S'il vous plaît expliquer au sujet de l'index non ordonnés en clusters ainsi.
Merci encore.

Si l'indice est Hashtable et il y a beaucoup d'employés avec le nom « Jésus » alors comment peut Hashtable conserver plusieurs adresses de lignes pour une seule clé « Jésus ».

Je veux savoir si
J'aurais Jésus clé
et un pointeur vers la table où les deux autres Jésus sera.

Comme:
Nom de l'employé
Jesus Anthony
Jesus Pert
Jesus Louis

arbre B:
Jésus
-> pointeur vers une table que je trouverai tout ce que Jésus:
Jésus - ROWID
Jésus - ROWID
Jésus -ROW ID

Si vous créez un index avec EMPLOYEE_NAME avec les valeurs: Jésus, Jésus, Jésus, Chris, Chris.
Combien de clés il aurait?
2 clés? si ses 2 clés où est 2 Jésus et 1 Chris seraient?

très très beau poste ... .quite simple, facile et compréhension. Merci







Articles Liés