L'indexation en cluster est désormais incontournable - pourquoi?

9

Plus tôt, il y a eu des débats / discussions non concluants sur l'opportunité (toujours) d'activer / d'éviter les index clusterisés.

Eh bien, j'ai compris qu'ils devaient être utilisés parfois avec des objectifs et un contexte appropriés.

Exigence d'index clusterisé pour la base de données SQL Azure :

"SQL Azure ne prend pas en charge les tables sans index cluster. Une table doit avoir un index cluster. Si une table est créée sans contrainte de cluster, un index cluster doit être créé avant qu'une opération d'insertion ne soit autorisée sur la table"

ne correspond pas aux conclusions, à la justification et aux explications précédentes.

Quelle est la justification, que j'ai manquée dans les explications précédentes, d'imposer rigidement l'ubiquité des index clusterisés sans aucune exception?

Gennady Vanin Геннадий Ванин
la source
4
SQL Azure est différent de SQL Server comme vous le savez. Azure est une base de données distribuée, stockant vos données sur plusieurs machines physiques. Voilà pourquoi.
1
Notez que dans la version 12 du service de base de données Azure SQL, vous pouvez avoir une table sans index cluster.
Troy Hunt

Réponses:

11

Lire à l' intérieur de SQL Azure :

SQL Azure fournit des bases de données logiques pour le stockage des données d'application. En réalité, les données de chaque abonné sont en fait stockées plusieurs fois, répliquées sur trois bases de données SQL Server réparties sur trois serveurs physiques dans un seul centre de données. De nombreux abonnés peuvent partager la même base de données physique.

Des clés en cluster sont nécessaires pour que les trois répliques de vos données puissent être synchronisées. Sans clé, il est impossible de savoir quelles lignes ont été mises à jour. Les tas (tables sans index cluster) n'ont que des «clés» physiques (fileid: pageid: slot) et puisque vos 3 répliques de la base de données logique partagent la base de données physique avec d'autres bases de données logiques, l'adresse physique sur un serveur n'a aucune signification sur l'autre les répliques, donc les tas ne pouvaient pas être répliqués.

Remus Rusanu
la source
Une clé (logique) ne doit pas nécessairement résider dans un index clusterisé. Il pourrait être non clusterisé. Peut-être la vraie raison pour laquelle un index cluster (probablement unique?) Est nécessaire est que les tas utilisent des RID alors que les index cluster uniques ne le font pas. C'est ce que vous vouliez dire?
nvogel
3
À partir du document lié: «La technologie sous-jacente de haute disponibilité et de réplication dans SQL Azure est basée sur la réplication des lignes B-Tree.». Ainsi, même si un segment de mémoire possède une clé NC, vous ne pouvez que répliquer le code NC, mais pas le segment de mémoire lui-même.
Remus Rusanu
1

Azure est un système distribué basé sur le cloud sur des serveurs distants. Les données seront probablement stockées sur plusieurs lecteurs / serveurs, et il serait extrêmement inefficace de le faire sur un tas (car le système devra savoir quelle machine vérifier, et sans index cluster, c'est une opération gourmande en ressources) .

L'index cluster fournit une recherche pour toutes les lignes et tous les autres index de la table, donc sans une, chaque opération en azur serait une analyse de table sur plusieurs machines.

JNK
la source
2
Cela pourrait être vrai, mais ce n'est pas le cas actuellement. Lisez l'article que j'ai lié, il explique comment fonctionne le routage des demandes et pourquoi vos requêtes s'exécutent toujours sur une seule boîte et ne s'étendent jamais sur plusieurs serveurs. C'est à dire. il n'y a pas de fragmentation.
Remus Rusanu