Кластерна індексація тепер повинна - чому?


9

Раніше для мене були незаперечні дебати / дискусії щодо того, чи варто (завжди) залучати / уникати кластерних індексів.

Ну, я зрозумів, що їх потрібно використовувати іноді з відповідними + конкретними цілями та контекстом.

Вимога до індексу кластерних баз даних SQL Azure :

"SQL Azure не підтримує таблиці без кластерних індексів. У таблиці повинен бути кластерний індекс. Якщо таблиця створена без кластерного обмеження, кластерний індекс повинен бути створений, перш ніж операція вставки буде дозволена в таблицю."

не вкладається в попередні висновки, обґрунтування та пояснення.

Яке обґрунтування, яке я пропустив із попередніх пояснень, жорсткого нав'язування всюдисущості кластерних індексів без будь-яких винятків?


4
SQL Azure відрізняється від SQL Server, як ви його знаєте. Azure - це розподілена база даних, яка зберігає ваші дані на більш ніж одній фізичній машині. Ось чому.

1
Зауважте, що в v12 Служби бази даних Azure SQL ви можете мати таблицю без кластерного індексу.
Полювання на Трою

Відповіді:


11

Прочитайте всередині SQL Azure :

SQL Azure забезпечує логічні бази даних для зберігання даних додатків. Насправді дані кожного абонента фактично зберігаються кілька разів, тиражуються через три бази даних SQL Server, які розподіляються на трьох фізичних серверах в одному центрі обробки даних. Багато підписників можуть мати спільну фізичну базу даних.

Кластеризовані ключі потрібні, щоб три репліки ваших даних могли синхронізуватися. Без клавіші, неможливо дізнатися, які рядки були оновлені. Купи (таблиці без кластеризованого індексу) мають лише фізичні "ключі" (fileid: pageid: slot), і оскільки ваші 3 репліки логічної бази даних поділяють фізичну базу даних з іншими логічними базами даних, фізична адреса на одному сервері не має значення для іншого репліки, отже, купи не могли бути тиражовані.


(Логічний) ключ не повинен містити кластерний індекс. Це може бути не згуртоване. Можливо, справжня причина, чому потрібен (мабуть, унікальний?) Кластерний індекс - це те, що купи використовують RID, тоді як унікальні кластерні індекси - ні. Це ви мали на увазі?
nvogel

3
З пов'язаного документа: "Основна технологія високої доступності та реплікації в SQL Azure заснована на реплікації рядків B-Tree." Тож навіть якщо в купі був би ключ NC, ви можете лише копіювати NC, але не саму купу.
Рем Русану


1

Azure - це розподілена хмарна система на віддалених серверах. Дані, ймовірно, зберігатимуться на декількох накопичувачах / серверах, і це буде вкрай неефективно робити це на купі (оскільки системі потрібно знати, яку машину перевірити, і без кластерного індексу це ресурсомістка робота) .

Кластеризований індекс забезпечує пошук усіх рядків та всіх інших індексів таблиці, тому без жодної операції в лазурі було б сканування таблиці на кількох машинах.


2
Це могло б бути правдою, але наразі це не так. Читайте статтю, яку я пов’язав, вона пояснює, як працює маршрутизація запитів і чому ваші запити завжди виконуються в одному полі і ніколи не охоплюють кілька серверів. Тобто немає заточок.
Рем Русану
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.