Що таке кластерний індекс?


15

Мені потрібно коротке пояснення кластерного індексу.

  • Що таке кластерний індекс?
  • Які найкращі практики використання кластерного індексу?

Корисно використовувати дати в кластерному індексі, оскільки нові дані завжди додаються до кінця таблиці.
Ральф Вінтерс

1
Можливо, але не завжди.
mrdenny

@mrdenny - ви могли б детальніше розглянути, коли це не буде так?
Ральф Вінтерс

1
Якщо рядки вводяться не в порядку. Якщо таблиця, як правило, запитується первинним ключем. Якщо первинний ключ є INT (або меншим) і на столі буде багато некластеризованих індексів, ніж кластерний ключ з датою буде більшим і менш ефективним. Якщо таблиця ніколи не буде запитуватися стовпчиком дати, ніж використовувати, оскільки кластеризаційний ключ не варто, оскільки використовуються лише некластеризовані індекси.
mrdenny

@mrdenny: також якщо в таблиці немає стовпця дати (підмножина вашого останнього :)
ypercubeᵀᴹ

Відповіді:


15

Простіше кажучи ...

Телефонний довідник: дані - це індекс / індекс - це дані. Щоб подивитися на вас, я почав би з Резай, наприклад, Аміра. Жоден зовнішній пошук не потрібен.

У базі даних:

Дані таблиці та кластерний індекс - одне і те ж (у SQL Server, також InnoDB, Oracle IOT)

Найкраща практика - вузька, числова, строго зростаюча (подумайте про ІДЕНТИЧНІСТЬ або стовпець Autonumber). Такі типи даних, як GUID, не є хорошою ідеєю

Посилання для читання (щоб уникнути роздуття цієї відповіді)

Редагуйте, щоб повністю пояснити мої пропозиції з найкращих практик, перейдіть за посиланням у коментарі Еріка Хамфрі: Королева індексації: Кімберлі Тріпп


3
Ви також захочете блогу Кімберлі Триппа
Ерік Хамфрі - lotahelp

1
І в цьому полягає проблема із застосуванням «найкращої практики» без контексту. Наприклад, якщо основним критерієм пошуку для великої часто шуканої таблиці є діапазон дат, найкращим місцем розташування кластеризованого індексу є дата пошуку НЕ первинний ключ. Скажімо, таблиця та кластерний індекс - одне і те ж, є занадто спрощеним. Дані фактично зберігаються в порядку, продиктованому кластерним індексом. Крім усього іншого, це означає, що кластерні індекси особливо корисні для пошуку в діапазоні, повертаючи повний набір даних.
Рассел Стін

2
@Russell Steen: 1. Я включив посилання 2. ОП повинен був попросити, подумайте, на якому рівні я поставив цю відповідь на 3. Ерік Хамфрі подав посилання для створення. Ми можемо пройти від конкретного випадку те, що ми знаємо і розуміємо більш досвідчені хлопці, але чи ми тут, щоб допомогти виховати чи перейняти ...?
gbn

Я чую, що ти кажеш. Проблема полягає не у вашій відповіді як такої, а в тому, що менш досвідчені люди, ніж ви, бігаєте цитуючи та застосовуючи щось, тому що це "найкраща практика", не розуміючи використання та контексту, для яких найкраща практика була написана - я б стверджують, що так, ми тут для того, щоб навчатись, і що цитування найкращих практик без надання більше контексту безпосередньо у публікації не є такою корисною роботою.
Рассел Стін

2
О, щойно помітив SQL-Serverтег, ігнорування.
ypercubeᵀᴹ

3

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

Індекс, що не кластеризується, не є таким швидким для пошуку, але ви можете мати багато таких типів індексів на столі.


3
Некластеризовані індекси можуть бути настільки ж ефективними для пошуку, якщо некластеризований індекс охоплює відповідний пошук.
Рассел Стін

@Russell Це не може бути швидше, оскільки індекс змусив фактичний порядок сортування даних. Немає більш простого / швидшого способу пошуку SQL або будь-якого RDBMS для пошуку потрібної йому інформації.
kacalapy

4
Я не сказав швидше. Індекс, що охоплює, містить усі дані, що вимагаються у виділеному в індексі - ЗАМОВЛЕННІ, в окремому місці на диску. Отже, вибір проти відповідного індексу покриття ніколи не потрапляє до таблиці.
Рассел Стін

2
NCI покриття, ймовірно, буде меншим, що означає менше сторінок для читання та швидше.
Мартін Сміт

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