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?
źródło
Odpowiedzi:
Czytaj Inside SQL Azure :
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.
źródło
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.
źródło