27 votes

Que sont les index et comment puis-je les utiliser pour optimiser les requêtes dans ma base de données?

Je gère une application et une base de données assez importantes et je constate des performances médiocres dans certaines de nos procédures stockées.

J'entends toujours que "l'ajout d'un index" peut être fait pour améliorer les performances. Je ne suis certainement pas un DBA et je ne comprends pas ce que sont les index, pourquoi ils aident et comment les créer.

J'ai essentiellement besoin d'un index 101.

Quelqu'un peut-il me donner des ressources pour que j'apprenne?

27voto

HLGEM Points 54641

En règle générale, les indices devraient être sur tous les champs que vous utilisez dans les jointures ou les clauses where (si ils ont assez de valeurs différentes pour le faire à l'aide d'un indice de la peine de terrain, avec seulement un peu de valeurs possibles, ne bénéficient pas d'un index, qui est pourquoi il est inutile d'essayer de l'indice d'un champ de bits).

Si votre structure a été crée officiellement les clés primaires (ce qui est normal, je n'ai jamais créer une table sans clé primaire), ceux-ci sont, par définition, indexé comme une clé primaire est obligatoire d'avoir un index unique sur elle. Souvent, les gens oublient qu'ils ont à l'index les clés étrangères en raison d'un index n'est pas automatiquement créé lorsque vous configurez la clé étrangère relationsship. Étant donné que le but d'une clé étrangère est de vous donner un champ d'adhérer, la plupart des clés étrangères devrait probablement être indexés.

Index une fois créés, ils doivent être maintenus. Si vous avez beaucoup de données changer d'activité, ils peuvent être fragmenté et ralentir les performances et ont besoin d'être rafraîchi. Lire dans la documentation en ligne sur les index. Vous pouvez également trouver la syntaxe de l'instruction create index là.

Les index sont une question d'équilibre, chaque indice vous ajoutez, généralement, ajouter de temps pour insérer des données, des mises à jour et des suppressions, mais peut potentiellement accélérer sélectionne et des jointures complexes, des insertions, des mises à jour et suppressions. Il n'y a pas de formule pour quels sont les meilleurs indices bien que la règle générale ci-dessus est un bon endroit pour commencer.

23voto

CodeRot Points 785

Pensez à un index similaire à un catalogue de cartes dans la bibliothèque. Un index vous empêche d'avoir à chercher dans chaque île ou étagère pour un livre. Au lieu de cela, vous pourrez peut-être trouver les éléments que vous souhaitez à partir d'un champ couramment utilisé, comme et ID, Nom, etc. Lorsque vous créez un index, la base de données crée essentiellement quelque chose de distinct qu'une requête pourrait atteindre plutôt que d'analyser la table entière . Vous accélérez la requête en lui permettant de rechercher un sous-ensemble de données plus petit ou un ensemble de données optimisé.

5voto

Mike Stone Points 21293

Un index de coeur sortes de vos données sur les colonnes et les magasins qui commande, donc quand vous voulez trouver un article, la base de données peut optimiser en utilisant binaire de recherche (ou d'un autre moyen optimisé de la recherche), plutôt que de chercher à chaque ligne.

Ainsi, si la quantité de données que vous êtes à la recherche par le biais de est grand, vous voulez absolument ajouter quelques indices.

La plupart des bases de données disposent d'un outil pour expliquer comment votre requête travail (pour db2, c'est db2expln, quelque chose de similaire, probablement pour sqlserver), et un outil de suggérer des indices et d'autres optimisations (db2advis pour db2, encore une fois probablement quelque chose de similaire pour sqlserver).

3voto

user2013 Points 2301

L'index est une méthode de systèmes de base de données à utiliser pour trouver rapidement des données. Le monde réel analogie sont des indices dans les livres. Si un auteur/éditeur fait un bon travail à l'indexation de leur livre, il devient assez facile pour le lecteur d'aller directement à la page qu'ils veulent lire, simplement en regardant l'index. En va de même pour une base de données. Si un index est créé sur un champ de la base de données pré-trie les données. Quand une demande est faite sur les données, la base de données utilise l'index pour identifier l'emplacement des données est stocké sur le disque dur, et va directement là. Si il n'y a pas d'index, la base de données doit examiner chaque dossier, afin de savoir s'il répond au critère(s) de votre requête.

Un moyen simple de regarder l'index est en pensant à un jeu de cartes. Une base de données qui n'est pas indexé, c'est comme un pont, les cartes qui ont été mélangées. Si vous souhaitez trouver le roi de pique, vous avez besoin de regarder chaque carte une par une pour trouver. Vous pourriez avoir de la chance et il peut être le premier, ou vous pourriez être pas de chance et il peut être le dernier.

Une base de données qui est indexé, il a toutes les cartes dans le deck a ordonné de l'as au roi et chaque suite est mis de côté dans sa propre pile. À la recherche pour le roi de pique est beaucoup plus simple maintenant, parce que vous avez simplement besoin de regarder en bas de la pile de cartes qui contient le pique.

J'espère que cette aide. Soyez averti, cependant que, bien que les indices sont nécessaires dans une base de données relationnelle système, ils peuvent contre-productive, si vous écrivez trop grand nombre d'entre eux. Il y a une tonne de grands articles sur le web que vous pouvez lire sur les indices. Je te suggère de faire un peu de lecture avant de vous plonger dans leur.

3voto

Cade Roux Points 53870

Comme indiqué précédemment, vous pouvez avoir un index cluster et de plusieurs index non cluster. Dans SQL 2005, vous pouvez également ajouter des colonnes supplémentaires à un index non-cluster, ce qui peut améliorer les performances, où quelques couramment extrait les colonnes sont inclus dans l'indice, mais ne fait pas partie de la clé, ce qui élimine un voyage à la table complètement.

Votre #1 outil pour déterminer ce que votre base de données SQL Server est fait, c'est le générateur de profils. Vous pouvez le profil de l'ensemble de la charge de travail et ensuite voir quels indices il recommande. Vous pouvez aussi consulter les plans d'exécution pour voir quels sont les effets d'un index.

Les trop nombreux indices problème est dû à l'écriture dans une base de données, et d'avoir à mettre à jour tous les index qui serait un record pour cette ligne. Si vous rencontrez des performances en lecture, ce n'est probablement pas à cause de trop d'index, mais trop peu, ou trop inadaptés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X