Comment travailler avec des index SQL

La spécification de SQL ne traite pas le sujet des indices, mais cette omission ne signifie pas que les index sont des pièces rares ou même en option d'un système de base de données. Chaque mise en œuvre de SQL supporte les index, mais vous ne trouverez pas d'accord universel sur la façon de les soutenir.

Sommaire

Qu'est-ce qu'un index?

Les données apparaissent dans une table dans l'ordre dans lequel vous avez entré les informations dans SQL. Ce décret peut avoir rien à voir avec l'ordre dans lequel vous voulez plus tard, pour traiter les données. Dites que vous voulez traiter votre table de client Nom du client commande. L'ordinateur doit d'abord trier le tableau dans Nom du client commande. Tri des données de cette manière prend du temps. Grandes tables prennent plus de temps à trier.

Que faire si vous avez une table avec 100.000 lignes? Ou une table avec un million de lignes? Dans certaines applications, ces tailles de table ne sont pas rares. Les meilleurs algorithmes de tri devront faire quelques comparaisons de 20 millions et des millions de swaps de mettre la table dans l'ordre souhaité. Même si vous utilisez un ordinateur très rapide, vous voudrez peut-être pas à attendre aussi longtemps.

Les index peuvent être un grand gain de temps. Un index est une filiale ou table de support qui va de pair avec une table de données. Pour chaque ligne de la table de données, vous avez une ligne correspondante dans la table d'index. L'ordre des lignes dans la table d'index est différent.

Nom du clientAdresse 1Adresse 2VilleÉtat
Butternut Animal Clinic5 Butternut LaneHudsonNew Hampshire
Ambre vétérinaire, Inc.470 Kolvir CercleD'ambreMI
Vétérinaires R Us2,300 Geoffrey routeSuite 230AnaheimCalifornie
Doggie Docteur32 Terry TerrasseNutleyNew Jersey
Le centre équestreVétérinaire7890 Paddock ParkwayGallupNM
Dolphin Institut1002 Marine DriveLa clé de l'OuestFL
J. C. Campbell, Vet de crédit2500 Main StreetLos AngelesCalifornie
Worm la ferme de Wenger15 Boulevard BaitSedonaAZ



Voici les lignes ne sont pas classés par ordre alphabétique Nom du client. En fait, ils ne sont pas dans l'ordre du tout utile. Les lignes sont tout simplement dans l'ordre dans lequel quelqu'un a introduit les données.

Nom du clientPointer au Tableau des données
Ambre vétérinaire, Inc.2
Butternut Animal Clinic1
Doggie Docteur4
Dolphin Institut6
J. C. Campbell, Vet de crédit7
Le centre équestre5
Vétérinaires R Us3
Worm la ferme de Wenger8

L'index contient le champ qui forme la base de l'indice (dans ce cas, Nom du client) Et un pointeur dans le tableau de données. Le pointeur dans chaque ligne d'index donne le nombre de ligne de la ligne correspondante dans le tableau de données.

Pourquoi vous devriez vouloir un indice

Si vous voulez traiter une table dans Nom du client commande, et vous avez un indice disposé dans Nom du client commande, vous pouvez effectuer votre opération presque aussi vite que vous pourriez, si la table de données elle-même étaient déjà en Nom du client commande. Vous pouvez travailler à travers l'indice, déplacer immédiatement à l'enregistrement correspondant de données de chaque ligne d'index en utilisant le pointeur dans l'indice.

Si vous utilisez un index, le temps de traitement de table est proportionnelle à N,N est le nombre d'enregistrements de la table. Sans un index, le temps de traitement pour la même opération est proportionnelle à Nlogn, LG N est le logarithme de N à la base 2. Pour les grandes tables, la différence est grande. Certaines opérations ne sont pas pratiques pour réaliser sans l'aide d'indices.

Supposons que vous avez une table contenant 1.000.000 dossiers (N = 1000000), et le traitement de chaque dossier prend une milliseconde (un millième de seconde). Si vous avez un index, le traitement de l'ensemble de la table prend seulement 1.000 secondes - moins de 17 minutes.

Sans un index, vous devez passer par la table environ 1.000.000 x 20 fois pour atteindre le même résultat. Ce processus prendrait 20.000 secondes - plus de cinq heures et demie. La différence entre 17 minutes et cinq heures et demie est substantielle.

Comment maintenir un indice

Après avoir créé un index, vous devez maintenir. Heureusement, votre SGBD maintient vos index pour vous automatiquement, par leur mise à jour chaque fois que vous mettez à jour les tableaux de données correspondants. Ce processus prend du temps, mais ça vaut le coup. Lorsque vous créez un index et votre SGBD maintient, l'indice est toujours disponible pour accélérer le traitement de vos données, peu importe combien de fois vous avez besoin de faire appel à elle.

Le meilleur moment pour créer un index est dans le même temps vous créez sa table de données correspondante. Essayez d'anticiper toutes les façons que vous voudrez peut-être d'accéder à vos données, puis créer un index pour chaque possibilité.

Certains produits de SGBD vous donnent la possibilité de désactiver la maintenance des index. Vous pouvez le faire dans certaines applications en temps réel lorsque la mise à jour des indices prend beaucoup de temps et vous avez peu précieux pour épargner. Vous pouvez même choisir de mettre à jour les index comme une opération distincte pendant les heures creuses. Comme d'habitude, “ faire ce qui fonctionne pour vous ” est la règle.

Ne pas tomber dans le piège de la création d'un index pour les commandes de récupération que vous êtes susceptibles d'utiliser. Indice de la maintenance est une opération supplémentaire que l'ordinateur doit effectuer chaque fois qu'il modifie le champ d'index ou ajoute ou supprime une ligne de tableau de données - et cette opération affecte les performances. Créer seuls les indices que vous comptez utiliser les touches comme récupération - et seulement pour les tables contenant un grand nombre de lignes.

Vous pouvez avoir besoin de compiler quelque chose comme un rapport mensuel ou trimestriel qui exige les données dans un ordre étrange que vous ne devez pas habituellement. Créer un index juste avant l'exécution de ce rapport périodique, exécutez le rapport, puis supprimer l'index de sorte que le SGBD est pas surchargé avec le maintien de l'indice au cours de la longue période entre les rapports.


» » » » Comment travailler avec des index SQL