Qu'est-ce qu'un index clusterisé?

15

J'ai besoin d'une courte explication de l'index clusterisé.

  • Qu'est-ce qu'un index clusterisé?
  • Quelles sont les meilleures pratiques d'utilisation de l'index clusterisé?
Amir Rezaei
la source
C'est une bonne idée d'utiliser une date dans un index cluster car les nouvelles données sont toujours ajoutées à la fin de la table.
Ralph Winters
1
Peut-être, mais pas toujours.
mrdenny
@mrdenny - pourriez-vous préciser quand ce ne serait pas le cas?
Ralph Winters
1
Si des lignes sont entrées dans le désordre. Si la table va plus généralement être interrogée par la clé primaire. Si la clé primaire est un INT (ou plus petit) et qu'il y aura beaucoup d'index non clusterisés sur la table, une clé clusterée datetime serait plus grande et moins efficace. Si la table ne sera jamais interrogée par la colonne date, l'utilisation de est car la clé de clustering ne serait pas utile car seuls les index non clusterisés seraient utilisés.
mrdenny
@mrdenny: aussi si la table n'a pas de colonne de date (un cas de sous-ensemble de votre dernier :)
ypercubeᵀᴹ

Réponses:

15

En termes simples ...

Un annuaire téléphonique: les données sont l'index / l'index est les données. Pour vous chercher, je commencerais par Rezaei, Amir par exemple. Aucune recherche externe n'est nécessaire.

En termes de base de données:

Les données de la table et l'index cluster sont identiques (dans SQL Server, également InnoDB, Oracle IOT)

La meilleure pratique est étroite, numérique, strictement croissante (pensez à la colonne IDENTITY ou Autonumber). Les types de données comme les GUID ne sont pas une bonne idée

Liens à lire (pour éviter de gonfler cette réponse)

Modifier, pour expliquer pleinement mes suggestions de meilleures pratiques, suivez le lien dans le commentaire d'Eric Humphrey: Reine de l'indexation: Kimberly Tripp

gbn
la source
3
Vous aurez également besoin du blog de Kimberly Tripp: sqlskills.com/BLOGS/KIMBERLY/category/Clustered-Index.aspx
Eric Humphrey - lotsahelp
1
Et c'est là que réside le problème de l'application des «meilleures pratiques» sans contexte. Par exemple, si le critère de recherche principal pour une grande table fréquemment recherchée est une plage de dates, votre meilleur emplacement pour l'index cluster est la date recherchée PAS la clé primaire. Dire que la table et l'index cluster sont une seule et même chose est un peu trop simplifié. Les données sont en fait stockées dans l'ordre dicté par l'index clusterisé. Cela signifie, entre autres, que les index clusterisés sont particulièrement utiles pour les recherches par plage renvoyant l'ensemble de données complet.
Russell Steen
2
@Russell Steen: 1. J'ai inclus des liens 2. OP a dû demander, considérez à quel niveau j'ai lancé cette réponse à 3. Eric Humphrey a fourni un lien de création. Nous pouvons examiner au cas par cas ce que nous, les gars plus expérimentés, savons et comprenons, mais sommes-nous ici pour aider à éduquer ou à submerger ...?
gbn
J'entends ce que tu dis. Le problème ne vient pas de votre réponse en soi, mais du fait que des gens moins expérimentés que vous se précipitent pour citer et appliquer quelque chose parce que c'est une "meilleure pratique" sans comprendre l'utilisation et le contexte pour lesquels la meilleure pratique a été écrite - je soutiennent que oui, nous sommes ici pour éduquer et que citer les meilleures pratiques sans fournir plus de contexte directement dans le post ne fait pas aussi bien son travail.
Russell Steen
2
Oh, je viens de remarquer la SQL-Serverbalise, mépris.
ypercubeᵀᴹ
3

C'est un index sur les données elles-mêmes de telle sorte que les enregistrements soient triés physiquement par le champ sur lequel vous avez l'index clusterisé. C'est pourquoi vous ne pouvez avoir qu'un seul index clusterisé par table.

L'index non clusterisé n'est pas aussi rapide pour les recherches, mais vous pouvez avoir plusieurs de ces types d'index sur une table.

kacalapy
la source
3
Les index non clusterisés peuvent être tout aussi efficaces pour les recherches, si l'index non clusterisé couvre la recherche en question.
Russell Steen
@Russell Il n'y a aucun moyen que ce soit plus rapide car l'index a forcé l'ordre de tri réel des données. Il n'existe aucun moyen plus simple / plus rapide pour SQL ou tout SGBDR de trouver les informations dont il a besoin.
kacalapy
4
Je n'ai pas dit plus vite. Un index de couverture contient toutes les données demandées dans la sélection de l'index - DANS L'ORDRE, sur un emplacement distinct sur le disque. Ainsi, une sélection par rapport à un indice de couverture correspondant n'atteint jamais la table.
Russell Steen
2
Une couverture NCI sera probablement plus petite, ce qui signifie moins de pages à lire et plus rapidement.
Martin Smith
La raison d'avoir un seul index cluster sur une table n'est pas un tri physique, les pages d'index sont toujours triées logiquement et l'allocation contiguë de pages n'est pas garantie. Vous ne pouvez avoir qu'un seul index cluster par table car l'index cluster est la table elle-même et les index non cluster sont les copies de la table avec les colonnes requises.
Manoj Pandey