Indeksowanie klastrowe jest teraz konieczne - dlaczego?

9

Wcześniej nie były dla mnie rozstrzygające debaty / dyskusje na temat tego, czy (zawsze) angażować / unikać indeksów klastrowych.

Zrozumiałem, że należy ich czasem używać z odpowiednimi + konkretnymi celami i kontekstem.

Wymagania dotyczące indeksu klastrowego bazy danych SQL Azure :

„SQL Azure nie obsługuje tabel bez indeksów klastrowych. Tabela musi mieć indeks klastrowany. Jeśli tabela jest tworzona bez ograniczenia klastrowego, indeks indeks klastrowany musi zostać utworzony przed zezwoleniem na operację wstawiania w tabeli”

nie pasuje do poprzednich wniosków, uzasadnienia i wyjaśnień.

Jakie jest uzasadnienie, którego nie zauważyłem w poprzednich wyjaśnieniach, dotyczące sztywnego narzucania wszechobecności indeksów klastrowych bez żadnych wyjątków?

Gennady Vanin Геннадий Ванин
źródło
4
SQL Azure różni się od SQL Server tak, jak go znasz. Azure jest rozproszoną bazą danych, która przechowuje dane na więcej niż jednej maszynie fizycznej. Dlatego.
1
Należy pamiętać, że w wersji 12 usługi Azure SQL Database Service może istnieć tabela bez indeksu klastrowego.
Troy Hunt

Odpowiedzi:

11

Czytaj Inside SQL Azure :

SQL Azure zapewnia logiczne bazy danych do przechowywania danych aplikacji. W rzeczywistości dane każdego subskrybenta są faktycznie przechowywane wielokrotnie, replikowane w trzech bazach danych SQL Server, które są rozproszone na trzech fizycznych serwerach w jednym centrum danych. Wielu subskrybentów może współdzielić tę samą fizyczną bazę danych.

Klucze klastrowe są wymagane, aby trzy repliki danych mogły być zsynchronizowane. Bez klucza, nie można wiedzieć, które wiersze zostały zaktualizowane. Sterty (tabele bez indeksu klastrowego) mają tylko fizyczne „klucze” (fileid: pageid: slot), a ponieważ 3 repliki logicznej bazy danych współużytkują fizyczną bazę danych z innymi logicznymi bazami danych, adres fizyczny na jednym serwerze nie ma znaczenia na drugim serwerze repliki, dlatego sterty nie mogły być replikowane.

Remus Rusanu
źródło
Klucz (logiczny) nie musi znajdować się w indeksie klastrowym. Może być nieklastrowany. Być może prawdziwym powodem, dla którego wymagany jest (prawdopodobnie unikalny?) Indeks klastrowy, jest to, że stosy używają identyfikatorów RID, podczas gdy unikalne indeksy klastrowe nie. Czy o to ci chodziło?
nvogel,
3
Z połączonego dokumentu: „Podstawowa technologia wysokiej dostępności i replikacji w SQL Azure opiera się na replikacji wierszy B-drzewa.”. Więc nawet jeśli sterty miałyby klucz NC, można było tylko replikować NC, ale nie samą stertę.
Remus Rusanu,
1

Azure to rozproszony system oparty na chmurze na zdalnych serwerach. Dane prawdopodobnie będą przechowywane na wielu dyskach / serwerach i byłoby to bardzo nieefektywne, aby to zrobić na stercie (ponieważ system będzie musiał wiedzieć, który komputer sprawdzić, a bez indeksu klastrowego jest to operacja wymagająca dużych zasobów) .

Indeks klastrowy zapewnia wyszukiwanie wszystkich wierszy i wszystkich innych indeksów w tabeli, więc bez jednej operacji w lazur byłby skan tabeli na wielu komputerach.

JNK
źródło
2
To może być prawda, ale w tej chwili tak nie jest. Przeczytaj artykuł, który podłączyłem, wyjaśnia, jak działa routing żądań i dlaczego twoje zapytania są zawsze uruchamiane na jednym urządzeniu i nigdy nie obejmują wielu serwerów. To znaczy. nie ma odłamków.
Remus Rusanu,