Question

Quels sont les différents types d’index, quels sont les avantages de chacun?

J'ai entendu parler de la couverture et des index clusterisés, y at-il plus? Où les utiliseriez-vous?

Était-ce utile?

La solution

  • Unique - Garantit des valeurs uniques pour la colonne (ou le jeu de colonnes) incluse dans l'index
  • .
  • Couvrant - Inclut toutes les colonnes utilisées dans une requête particulière (ou un ensemble de requêtes), permettant à la base de données d'utiliser uniquement l'index et de ne pas avoir à consulter les données de la table pour extraire les résultats
  • Clustered - Il s'agit d'une méthode selon laquelle les données réelles sont classées sur le disque. Autrement dit, si une requête utilise l'index clusterisé pour rechercher les valeurs, il n'est pas nécessaire de rechercher l'étape suivante dans la ligne du tableau. pour toutes les données non incluses dans l'index.

Autres conseils

OdeToCode contient un bon article couvrant les différences fondamentales

.

Comme il est dit dans l'article:

  

Les bons indices sont cruciaux pour le bien   performances dans les grandes bases de données.   Parfois, vous pouvez compenser pour un mal   requête écrite avec un bon index, mais   il peut être difficile de rattraper les pauvres   l'indexation même avec les meilleures requêtes.

Tout à fait vrai aussi ... Si vous débutez avec ça, je me concentrerai sur les index en grappes et composites, car ils seront probablement ce que vous utiliserez le plus souvent.

Je vais ajouter quelques types d'index

BITMAP - lorsque vous avez un très petit nombre de valeurs possibles différentes, très rapide et ne prend pas beaucoup de place

PARTITIONED - permet de partitionner l'index en fonction d'une propriété généralement avantageuse sur des objets de base de données très volumineux pour des raisons de stockage ou de performances.

Index FUNCTION / EXPRESSION - utilisés pour précalculer une valeur basée sur la table et la stocker dans l'index, un exemple très simple pourrait être un index basé sur lower () ou une fonction de sous-chaîne.

PostgreSQL permet les index partiels, où seules les lignes qui correspondent à un prédicat sont indexées. Par exemple, vous voudrez peut-être indexer la table client uniquement pour les enregistrements actifs. Cela pourrait ressembler à quelque chose comme:

create index i on customers (id, name, whatever) where is_active is true;

Si votre index comporte plusieurs colonnes et que vous avez de nombreux clients inactifs, cela peut représenter un gain considérable en termes d'espace (l'index sera stocké dans moins de pages de disque) et donc de performances. Pour atteindre l'index, vous devez au minimum spécifier le prédicat:

select name from customers where is_active is true;

La sagesse classique suggère que le choix de l’indice devrait être basé sur la cardinalité. Ils vont dire,

  

Pour une colonne faible cardinalité telle que GENDER, utilisez bitmap. Pour une cardinalité élevée telle que LAST_NAME, utilisez un arbre b.

Ce n'est pas le cas avec Oracle , où le choix de l'index doit plutôt être basé sur le type d'application (OLTP ou OLAP). DML sur des tables avec des index bitmap peut provoquer de graves conflits de verrous. D'autre part, Oracle CBO peut facilement combiner plusieurs index bitmap, et les index bitmap peuvent être utilisés pour rechercher des valeurs NULL. En règle générale:

  

Pour un système OLTP avec des requêtes DML et de routine fréquentes, utilisez btree. Pour un système OLAP avec des requêtes DML et ad hoc peu fréquentes, utilisez bitmap.

Je ne suis pas sûr que cela s'applique à d'autres bases de données, les commentaires sont les bienvenus. Les articles suivants abordent le sujet plus en détail:

Différents systèmes de base de données ont des noms différents pour le même type d'index, soyez donc vigilant. Par exemple, ce que SQL Server et Sybase appellent "index en cluster". est appelée dans Oracle une "table organisée par index".

Je vous suggère de rechercher les blogs de Jason Massie ( http://statisticsio.com/ ) et de Brent Ozar. ( http://www.brentozar.com/ ) pour des informations connexes. Ils ont des articles sur des scénarios réels qui traitent d’index.

Oracle combine diverses combinaisons d'arborescence binaire, d'images bitmap, partitionnées ou non, d'octets inversés, de jointures bitmap et d'index de domaine.

Voici un lien vers la documentation de 11gR1 sur le sujet: http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004

  1. Unique
  2. cluster
  3. non-cluster
  4. magasin de colonnes
  5. Index avec colonne incluse
  6. l'index est la colonne calculée
  7. filtré
  8. spatial
  9. xml
  10. texte intégral

SQL Server 2008 a index filtrés , similaire aux index partiels de PostgreSQL. Les deux permettent d'inclure dans l'index uniquement les lignes correspondant aux critères spécifiés.

La syntaxe est identique à PostgreSQL:

create index i on Customers(name) where is_alive = cast(1 as bit);

Pour afficher les types d’index et ses visites de signification: https://msdn.microsoft.com/en-us/library/ms175049.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top