Clustered-Indizierung ist jetzt ein Muss - warum?


9

Früher gab es für mich nicht schlüssige Debatten / Diskussionen darüber, ob (immer) Clustered-Indizes aktiviert / vermieden werden sollten.

Nun, ich habe verstanden, dass sie manchmal mit richtigen + spezifischen Zwecken und Kontexten verwendet werden sollen.

Clustered Index-Anforderung für SQL Azure-Datenbank :

"SQL Azure unterstützt keine Tabellen ohne Clustered-Indizes. Eine Tabelle muss einen Clustered-Index haben. Wenn eine Tabelle ohne Clustered-Einschränkung erstellt wird, muss ein Clustered-Index erstellt werden, bevor ein Einfügevorgang für die Tabelle zulässig ist."

passt nicht in die vorherigen Schlussfolgerungen, Begründungen und Erklärungen.

Was ist der Grund, den ich in früheren Erklärungen übersehen habe, um ausnahmslos die Allgegenwart von Clustered-Indizes zu erzwingen?


4
SQL Azure unterscheidet sich von SQL Server, wie Sie es kennen. Azure ist eine verteilte Datenbank, in der Ihre Daten auf mehreren physischen Computern gespeichert werden. Deshalb.

1
Beachten Sie, dass Sie in Version 12 des Azure SQL-Datenbankdiensts möglicherweise eine Tabelle ohne Clustered-Index haben.
Troy Hunt

Antworten:


11

In SQL Azure lesen :

SQL Azure bietet logische Datenbanken für die Speicherung von Anwendungsdaten. In der Realität werden die Daten jedes Teilnehmers tatsächlich mehrmals gespeichert und auf drei SQL Server-Datenbanken repliziert, die auf drei physische Server in einem einzigen Rechenzentrum verteilt sind. Viele Abonnenten verwenden möglicherweise dieselbe physische Datenbank.

Clustered Keys sind erforderlich, damit die drei Replikate Ihrer Daten synchron gehalten werden können. Ohne Schlüssel ist es unmöglich zu wissen, welche Zeilen aktualisiert wurden. Heaps (Tabellen ohne Clustered-Index) haben nur physische 'Schlüssel' (Datei-ID: Seiten-ID: Steckplatz). Da Ihre drei Replikate der logischen Datenbank die physische Datenbank mit anderen logischen Datenbanken teilen, hat die physische Adresse auf einem Server auf dem anderen Server keine Bedeutung Replikate, daher konnten Haufen möglicherweise nicht repliziert werden.


Ein (logischer) Schlüssel muss sich nicht in einem Clustered-Index befinden. Es könnte nicht gruppiert sein. Möglicherweise ist der wahre Grund, warum ein (vermutlich eindeutiger?) Clustered-Index erforderlich ist, dass Heaps RIDs verwenden, während eindeutige Clustered-Indizes dies nicht tun. Ist es das, was du meintest?
Nvogel

3
Aus dem verknüpften Dokument: "Die zugrunde liegende Hochverfügbarkeits- und Replikationstechnologie in SQL Azure basiert auf der Replikation von B-Tree-Zeilen." Selbst wenn ein Heap einen NC-Schlüssel hätte, könnten Sie nur die NC replizieren, nicht aber den Heap selbst.
Remus Rusanu


1

Azure ist ein verteiltes, Cloud-basiertes System auf Remoteservern. Die Daten werden wahrscheinlich auf mehreren Laufwerken / Servern gespeichert, und es wäre äußerst ineffizient, dies auf einem Heap zu tun (da das System wissen muss, welcher Computer überprüft werden soll, und dies ohne Clustered-Index ein ressourcenintensiver Vorgang ist). .

Der Clustered-Index bietet eine Suche nach allen Zeilen und allen anderen Indizes in der Tabelle. Ohne einen Index wäre jede Operation in Azure ein Tabellenscan auf mehreren Computern.


2
Das könnte wahr sein, ist es aber im Moment nicht. Lesen Sie den Artikel, den ich verlinkt habe. Er erklärt, wie das Anforderungsrouting funktioniert und warum Ihre Abfragen immer auf einer einzigen Box ausgeführt werden und niemals mehrere Server umfassen. Dh. Es gibt keine Scherben.
Remus Rusanu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.