Y a-t-il une raison d'utiliser l'index pour les très petites tables (jusqu'à 1000 lignes)?

9

Pendant le développement d'applications, j'ai beaucoup de tableaux qui stockent une "petite" quantité de données (généralement 10 à 40 valeurs, id+ valueet parfois type) qui contiennent des attributs pour des "objets", comme frais / pourri, rouge / vert / bleu pour les produits.

Je ne mets pas ces attributs dans le tableau des produits car les composants électroniques ne peuvent pas être frais, et l'oxygène gazeux ne peut pas être rouge et les tableaux ne peuvent pas avoir un nombre de lignes illimité ...

Pour stocker des attributs, j'utilise de petites tables personnalisées où le champ 2-3: idpour la liaison, namepour afficher dans l'application et parfois typesi les groupes d'attributs dans la même catégorie.

Les "objets" primaires sont liés aux attributs par le biais de tables plusieurs-à-plusieurs intermédiaires.

Y a-t-il une raison de créer et de maintenir des index pour ces "petits dictionnaires" avec moins de 1000 éléments (généralement 10-40)?

Ma base de données cible est Oracle mais j'espère que cette réponse sera indépendante du fournisseur ...

Je remplis - non, mais je n'ai aucune compétence technique pour justifier mon remplissage ...

gavenkoa
la source

Réponses:

14

Généralement oui. En l'absence d'index, le modèle d'accès doit inspecter chaque ligne, juste pour voir si c'est celui dont vous avez besoin ou non. Le problème n'est pas la taille de la table, mais la concurrence. Selon votre niveau d'isolement, vos analyses peuvent se bloquer derrière une transaction non validée juste pour attendre que les lignes qui sont finalement «inintéressantes» soient déverrouillées. Parce que votre analyse est garantie de «regarder» chaque ligne, chaque analyse se bloque derrière toute écriture (insertion, suppression ou mise à jour). Oracle utilise par défaut l'isolement d'instantané, ce qui est OK dans cette situation (pas de blocage), mais d'autres fournisseurs utilisent par défaut autre chose, par exemple. Par défaut, SQL Server est lu en lecture, ce qui bloque.

Avec un index présent, votre modèle d'accès ne regardera que les lignes pertinentes (dans la plage de clés souhaitée), ce qui réduit considérablement les chances statistiques de toucher un conflit de verrouillage.

Remus Rusanu
la source
Merci pour l'explication, j'ai une question de suivi (bien que ce soit maintenant 3 ans plus tard). Qu'en est-il des très petites tables de 3 ou 4 rangées maximum?
Rob
Les petites tables Cert (qui tiennent sur 1-2 pages) seront très probablement scannées
Remus Rusanu
@Remus requis pour créer un index sur MySQL
Singh Kailash