Ранее для меня были неокончательные дебаты / дискуссии о том, следует ли (всегда) привлекать / избегать кластеризованные индексы.
Ну, я понял, что они должны использоваться иногда с надлежащими + конкретными целями и контекстом.
Требование к кластерному индексу базы данных SQL Azure :
«SQL Azure не поддерживает таблицы без кластеризованных индексов. Таблица должна иметь кластеризованный индекс. Если таблица создается без кластеризованного ограничения, кластеризованный индекс должен быть создан до того, как операция вставки в таблицу будет разрешена».
не вписывается в предыдущие выводы, обоснования и объяснения.
Какой смысл, который я упустил из предыдущих объяснений, жестко навязывать повсеместность кластерных индексов без каких-либо исключений?
источник
Ответы:
Читать внутри SQL Azure :
Кластерные ключи необходимы для синхронизации всех трех копий ваших данных. Без ключа невозможно узнать, какие строки были обновлены. Кучи (таблицы без кластерного индекса) имеют только физические «ключи» (fileid: pageid: slot), и поскольку ваши 3 реплики логической базы данных совместно используют физическую базу данных с другими логическими базами данных, физический адрес на одном сервере не имеет значения для другого реплики, следовательно, кучи не могут быть скопированы.
источник
Azure - это распределенная облачная система на удаленных серверах. Данные, вероятно, будут храниться на нескольких дисках / серверах, и было бы крайне неэффективно делать это в куче (поскольку системе нужно будет знать, какую машину проверять, и без кластерного индекса это ресурсоемкая операция) ,
Кластерный индекс обеспечивает поиск всех строк и всех других индексов в таблице, поэтому без каждой операции в Azure можно было бы сканировать таблицу на нескольких компьютерах.
источник