Що насправді означає індекс кластеризованого та не кластеризованого?


1117

У мене обмежена експозиція до БД і я використовував лише БД як програміст додатків. Я хочу знати про Clusteredі Non clustered indexes. Я гуглив, і що я знайшов:

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

Що я знайшов в SO: Що відрізняються між кластеризованим та некластеризованим індексом? .

Чи може хтось пояснити це простою англійською?

Відповіді:


1115

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

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

Як правило, швидше читати з кластерного індексу, якщо ви хочете отримати всі стовпці. Не потрібно йти спочатку до індексу, а потім до таблиці.

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


43
Вам слід уточнити, що ви маєте на увазі під «фізично».
Спенсер Рупорт

141
фізично, як у фактичних бітах, що зберігаються на диску
Пітер

17
Зверніться до msdn "Коли ви створюєте обмеження PRIMARY KEY, унікальний кластерний індекс на стовпчику або стовпцях автоматично створюється, якщо кластерний індекс у таблиці вже не існує", а це означає, що необов'язково повинні бути одним і тим же стовпцем.
Мін

46
@Перед, це не так. SQL Server, безумовно, не гарантує, що всі файли даних розміщені у суміжній фізичній зоні диска і є нульова фрагментація файлової системи. Це навіть неправда, що кластерний індекс в порядку файлу даних. Ступінь, в якій це не так, - ступінь логічної фрагментації.
Мартін Сміт

42
Просто швидкий коментар для резервного копіювання точки Мартина Сміта - кластерні індекси не гарантують послідовного зберігання на диску. Управління саме там, де дані розміщені на диску, - це завдання ОС, а не СУБД. Але це говорить про те, що елементи впорядковуються, як правило, за клавішним кластером. Це означає, що якщо БД, наприклад, зростає на 10 Гб, ОС може вирішити поставити ці 10 ГБ в шматки 5х2 ГБ на різних частинах диска. Кластеризована таблиця, що охоплює 10 Гб, буде зберігатися послідовно на кожному шматі 2 ГБ, ці 2 ГБ шматки НЕ МОЖЕ бути послідовними.
краплі

601

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

Наприклад, у вас є дві таблиці: Клієнт і Замовлення:

Customer
----------
ID
Name
Address

Order
----------
ID
CustomerID
Price

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

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

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


4
При цьому, CI слід використовувати завжди для ПК
mko

4
Отже, з кластеризованим індексом це записи в індексі або таблиці, які зберігаються близько один до одного?
Caltor

5
@Caltor Таблиця. Індекс упорядковується за визначенням. Наприклад, btree буде впорядковано, щоб можна було просто робити арифметичні адреси для пошуку. Ідея кластеру полягає в тому, щоб задовольнити таблицю щодо виконання певного індексу. Щоб було зрозуміло, записи таблиці будуть упорядковані так, щоб вони відповідали порядку , в якому індекс спочатку .
FLGMwt

9
@Caltor Зовсім не! Дійсно, документація та сама назва є досить оманливими. Наявність "кластерного індексу" насправді має дуже мало спільного з індексом. Концептуально те, що у вас є насправді, - це "таблиця, згрупована за індексом x ".
FLGMwt

3
@ JohnOrtizOrdoñez: Звичайно, ви можете використовувати практично будь-які , які ніколи зберігаються в построчно, так що немає XML, VARCHAR(MAX)або VARBINARY(MAX). Зауважте, що зазвичай має сенс кластеризувати спочатку поле дати , оскільки кластерний індекс є найбільш ефективним для сканування діапазону, які найбільш поширені для типів дати. YMMV.

317

У сховищі, орієнтованому на рядки SQL, і кластерні, і некластеризовані індекси організовані як B дерева.

введіть тут опис зображення

( Джерело зображення )

Ключова відмінність кластерних індексів від некластеризованих індексів полягає в тому, що рівень листя кластерного індексу є таблицею. Це має два наслідки.

  1. Рядки на кластеризованих сторінках аркуша індексу завжди містять щось для кожного (нерозріджених) стовпців таблиці (або значення, або вказівник на фактичне значення).
  2. Кластерний індекс - це первинна копія таблиці.

Некластеризовані індекси також можуть зробити пункт 1, використовуючи INCLUDEпункт (Так як SQL Server 2005), щоб явно включити всі не ключові стовпці, але вони є вторинними поданнями, і завжди є ще одна копія даних навколо (сама таблиця).

CREATE TABLE T
(
A INT,
B INT,
C INT,
D INT
)

CREATE UNIQUE CLUSTERED INDEX ci ON T(A,B)
CREATE UNIQUE NONCLUSTERED INDEX nci ON T(A,B) INCLUDE (C,D)

Два вище індекси будуть майже однаковими. Що стосується індексних сторінок верхнього рівня, що містять значення для ключових стовпців A,Bта сторінок рівня аркушів, що містятьA,B,C,D

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

Вищенаведена цитата з книг SQL Server в Інтернеті викликає велику плутанину

На мою думку, це було б набагато краще сформулювати як.

На одну таблицю може бути лише один кластерний індекс, тому що рядки рівня аркуша кластеризованого індексу - це рядки таблиці.

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

Це було б абсурдною реалізацією. Наприклад, якщо рядок вставлено в середину таблиці 4 Гб, SQL Server не повинен копіювати 2 ГБ даних у файл, щоб звільнити місце для щойно вставленої рядки.

Натомість відбувається розкол сторінки. Кожна сторінка на рівні аркушів як кластерних, так і некластеризованих індексів має адресу ( File:Page) наступної та попередньої сторінки в порядку логічного ключа. Ці сторінки не повинні бути ні суміжними, ні ключовими.

наприклад, ланцюжок пов’язаних сторінок може бути 1:2000 <-> 1:157 <-> 1:7053

Коли трапляється розділення сторінки, нова сторінка виділяється з будь-якої точки файлової групи (зі змішаної міри, для невеликих таблиць, або з порожнього рівномірного обсягу, що належить цьому об'єкту, або новопризначеного рівномірного обсягу). Це може бути навіть у одному файлі, якщо група файлів містить більше одного.

Ступінь, в якій логічний порядок і суміжність відрізняється від ідеалізованої фізичної версії, - це ступінь логічної фрагментації.

У новоствореній базі даних з одним файлом я запустив наступне.

CREATE TABLE T
  (
     X TINYINT NOT NULL,
     Y CHAR(3000) NULL
  );

CREATE CLUSTERED INDEX ix
  ON T(X);

GO

--Insert 100 rows with values 1 - 100 in random order
DECLARE @C1 AS CURSOR,
        @X  AS INT

SET @C1 = CURSOR FAST_FORWARD
FOR SELECT number
    FROM   master..spt_values
    WHERE  type = 'P'
           AND number BETWEEN 1 AND 100
    ORDER  BY CRYPT_GEN_RANDOM(4)

OPEN @C1;

FETCH NEXT FROM @C1 INTO @X;

WHILE @@FETCH_STATUS = 0
  BEGIN
      INSERT INTO T (X)
      VALUES        (@X);

      FETCH NEXT FROM @C1 INTO @X;
  END

Потім перевірте макет сторінки

SELECT page_id,
       X,
       geometry::Point(page_id, X, 0).STBuffer(1)
FROM   T
       CROSS APPLY sys.fn_PhysLocCracker( %% physloc %% )
ORDER  BY page_id

Результати були всюди. Перший рядок у ключовому порядку (значення 1 - підкреслено стрілкою внизу) знаходився майже на останній фізичній сторінці.

введіть тут опис зображення

Фрагментація може бути зменшена або усунена шляхом перебудови або реорганізації індексу для збільшення кореляції між логічним порядком і фізичним порядком.

Після бігу

ALTER INDEX ix ON T REBUILD;

Я отримав таке

введіть тут опис зображення

Якщо в таблиці немає кластерного індексу, вона називається купою.

Некластеризовані індекси можуть бути побудовані або на купі, або на кластерному індексі. Вони завжди містять локатор рядків назад до базової таблиці. У разі купи це фізичний ідентифікатор рядків (позбавлений) і складається з трьох компонентів (Файл: Сторінка: Слот). У випадку кластерного індексу локатор рядків є логічним (кластерний індексний ключ).

В останньому випадку, якщо некластеризований індекс вже природно включає стовпці ключів CI або як стовпці ключів NCI або INCLUDEстовпці -d, тоді нічого не додається. В іншому випадку відсутній стовпець ключів CI мовчки додається до NCI.

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

Кластеризовані індекси uniquifierдодаються для будь-яких рядків з ключовими значеннями, що дублюють існуючий рядок. Це просто висхідне ціле число.

Для некластеризованих індексів, не оголошених унікальним SQL Server, мовчки додає локатор рядків у некластеризований індексний ключ. Це стосується всіх рядків, а не лише тих, які насправді є дублікатами.

Кластеризована порівняно з некластеризованою номенклатурою також використовується для індексів магазину стовпців. У статті Удосконалення стовпців Stores SQL Server станів

Хоча дані зберігання стовпців насправді не «кластеризовані» на жодному ключі, ми вирішили зберегти традиційну конвенцію SQL Server щодо посилання на первинний індекс як кластерний індекс.


8
@brainstorm так, я знаю про це. Ймовірно, це через фразування на цій сторінці MSDN, але щоб побачити, що там є фразування дещо вводить в оману, потрібно просто переглянути теми фрагментації
Мартін Сміт,

12
@brainstorm: Дивно, як деякі помилкові твердження повторюються як євангеліє. Кластеризація вказує на те, що, принаймні з точки зору послідовного читання, було б "бажано", щоб рядки зберігалися фізично на диску в тому ж порядку, що й індекс , але це далеко не те, що це може призвести до того, що вони фактично змусять їх зберігатись таким чином.
supercat

5
@MartinSmith Я відтворив і підтвердив результати свого тестування SQL Server 2014. Я отримую 95%фрагментацію індексу після початкової вставки. Після того, index rebuildяк фрагментація була, 0%і значення були впорядковані. Мені цікаво, чи можна це сказати The only time the data rows in a table are stored in sorted order is when its clustered index fragmentation is 0?
gotqn

8
@MartinSmith Тепер, сер, це відповідь. Мені б хотілося побачити це в списку відповідей, але в міру SO так, "швидкий і простий" отримує переваги.
vaitrafra

5
@Manachi цю відповідь було надано через 5 років після того, як було задано оригінальне запитання. Мета його - виправити деякі оманливі аспекти цих відповідей. (Зараз 8 років) примхи ОП - це не моя проблема. Інші читачі можуть оцінити подання нижчого рівня.
Мартін Сміт

149

Я усвідомлюю, що це дуже давнє запитання, але я подумав, що запропоную аналогію, яка допоможе проілюструвати тонкі відповіді вище.

КЛАСТИРОВАНИЙ ІНДЕКС

Якщо ви зайшли в публічну бібліотеку, то побачите, що всі книги розташовані в певному порядку (швидше за все, десятковій системі Дьюї або DDS). Це відповідає "кластерному індексу" книг. Якщо DDS # для книги, яку ви хочете, був 005.7565 F736s, ви почнете з розташування рядка книжкових полиць, що позначений етикеткою, 001-099або щось подібне. (Цей знак endcap в кінці стеку відповідає "проміжному вузлу" в індексі.) Врешті-решт, ви перейдете до конкретної полиці, позначеної позначкою 005.7450 - 005.7600, і потім будете сканувати, поки не знайдете книгу із вказаним DDS # та на в той момент ви знайшли свою книгу.

НЕКЛАСТИРОВАНИЙ ІНДЕКС

Але якщо ви не зайшли в бібліотеку із запам’ятованою DDS # вашої книги, то вам знадобиться другий індекс, який допоможе вам. За старих часів ви знайдете на передній частині бібліотеки чудове бюро ящиків, відоме як "Каталог карт". У ній було тисячі карт 3x5 - по одній для кожної книги, відсортованих за алфавітом (можливо, за назвою). Це відповідає "некластеризованому індексу" . Ці каталоги карт були організовані в ієрархічній структурі, так що кожен ящик мітки був би позначений діапазоном карток, який він містив ( Ka - Klнаприклад; "проміжний вузол"). Знову ви будете висвітлювати, поки не знайдете свою книгу, але в цьому випадку, як тільки ви знайдете її (тобто "вузол листів"), у вас немає самої книги,номер індексу (DDS #), за допомогою якого ви могли знайти фактичну книгу в кластерному індексі.

Звичайно, ніщо не завадить бібліотекару фотокопіювати всі картки та сортувати їх в іншому порядку в окремий каталог карт. (Зазвичай було щонайменше два таких каталоги: один відсортований за іменем автора та один за заголовком.) В принципі, у вас може бути стільки цих "некластеризованих" індексів, скільки вам потрібно.


2
Можливо, я міг би розширити цю аналогію, щоб описати стовпці "Включені" , які можна використовувати з некластеризованими індексами: можна було б уявити карту в каталозі карт, включаючи більше, ніж просто одну книгу, а натомість список усіх опублікованих версії книги, впорядковані чисельно за датою публікації. Як і у "включеному стовпчику" ця інформація зберігається лише на рівні аркушів (таким чином зменшується кількість карток, які повинен створити бібліотекар).
kmote

чудова аналогія - насправді допомагає візуалізувати її!
Денис

71

Знайдіть нижче деякі характеристики кластерних та некластеризованих індексів:

Кластерні індекси

  1. Кластеризовані індекси - це індекси, що однозначно ідентифікують рядки таблиці SQL.
  2. Кожна таблиця може мати рівно один кластерний індекс.
  3. Ви можете створити кластерний індекс, який охоплює більше одного стовпця. Наприклад: create Index index_name(col1, col2, col.....).
  4. За замовчуванням стовпчик з первинним ключем вже має кластерний індекс.

Некластеризовані індекси

  1. Некластеризовані індекси схожі на прості індекси. Вони просто використовуються для швидкого пошуку даних. Не обов’язково мати унікальні дані.

34
Одне невелике виправлення до пункту 1. Кластерний індекс не обов'язково однозначно визначає рядки в таблиці SQL. Така функція ПЕРВИЧНОГО КЛЮЧА
Найджел

4
@Nigel, ОСНОВНИЙ КЛЮЧ або УНІКАЛЬНИЙ ІНДЕКС?
анар халілов

практична і пряма відповідь, дякую @Anirudh Sood
Оскар Ромеро

50

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


47

Індекс кластера

Кластерний індекс визначає фізичний порядок даних у таблиці. З цієї причини в таблиці є лише 1 кластерний індекс.

  • " словник " Не потрібен жоден інший індекс, його вже індекс відповідно до слів

Індекс без кластеру

Некластеризований індекс аналогічний індексу в Книзі. Дані зберігаються в одному місці. Індекс зберігається в іншому місці, а індекс має вказівники на місце зберігання даних. З цієї причини в таблиці є більше 1 некластерного індексу.

  • " Хімія книга" при гляді є окремий індекс, який вказує місце глави, а "END" є інший індекс, що вказує на загальне розташування WORDS

6

Індекс кластера

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

Єдиний раз, коли рядки даних у таблиці зберігаються у відсортованому порядку, це коли таблиця містить кластерний індекс. Коли таблиця має кластерний індекс, таблиця називається кластерною таблицею. Якщо таблиця не має кластерного індексу, її рядки даних зберігаються у не упорядкованій структурі, що називається купою.

Некластеризований

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

Ви можете додати нерозбіркові стовпці до рівня листів некластеризованого індексу для обходу існуючих лімітів ключових індексів та виконання повністю закритих, індексованих запитів. Для отримання додаткової інформації див. Створення індексів із включеними стовпцями. Докладніше про обмеження ключових показників див. У специфікаціях максимальної ємності для SQL Server.

Довідка: https://docs.microsoft.com/en-us/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described


4

Дозвольте запропонувати визначення підручника щодо "індексу кластеризації", який взято з 15.6.1 з " Система баз даних: Повна книга" :

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

Щоб зрозуміти визначення, давайте подивимось на Приклад 15.10, наданий підручником:

Відносини, R(a,b)які сортуються за атрибутом aі зберігаються в тому порядку, упаковуються в блоки, безумовно, є кластерними. Індекс на a- це індекс кластеризації, оскільки для заданої aвеличини a1 всі кортежі з цим значенням aє послідовними. Таким чином, вони виглядають упакованими в блоки, за винятком, можливо, першого та останнього блоків, що містять a-значення a1, як це запропоновано на фіг.15.14. Однак індекс на b навряд чи буде кластеризованим, оскільки кортежі з фіксованою bвеличиною будуть розповсюджені по всьому файлу, якщо значення aта bдуже тісно не пов'язані між собою.

Рис 15.14

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

Пов'язана концепція є кластерним відношенням . Відношення "кластеризується", якщо його кортежі упаковані приблизно в кілька блоків, наскільки вони можуть містити ці кортежі. Іншими словами, з точки зору блоку диска, якщо він містить кортежі з різних відносин, ці відносини не можуть бути кластеризовані (тобто, є більш упакований спосіб зберігання такого відношення, замінюючи кортежі цього відношення з інших блоків дисків на кортежі не належать до відношення в поточному блоці диска). Зрозуміло, що R(a,b)в прикладі вище кластеризовано.

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

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

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

Індекс атрибутів (-ів) A у файлі - це індекс кластеризації, коли: Усі кортежі зі значенням атрибута A = a зберігаються послідовно (= послідовно) у файлі даних

Зберігання кортежів послідовно - це те саме, що говорити "кортежі упаковані приблизно в кілька блоків, наскільки вони можуть містити ці кортежі" (з незначною різницею, коли один говорить про файл, а інший - про диск). Це тому, що послідовне зберігання кортежу - це спосіб досягти "упакованого приблизно в кілька блоків, наскільки вони можуть утримувати ці кортежі".


3

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

Індекс, не кластеризований : фактичні дані некластеризованого індексу не знаходяться безпосередньо у вузлі аркуша, натомість він повинен зробити додатковий крок, щоб знайти, оскільки він має лише значення локаторів рядків, що вказують на фактичні дані. Некластеризований індекс не може бути відсортований як кластерний індекс. На таблицю може бути кілька некластеризованих індексів, насправді це залежить від версії сервера sql, яку ми використовуємо. В основному сервер Sql 2005 дозволяє 249 не кластеризованих індексів, а для вищезгаданих версій, таких як 2008, 2016, він дозволяє 999 не кластеризованих індексів на таблицю.


2

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

Індекс без кластера- Некластерний індекс не сортує фізичні дані всередині таблиці. Фактично некластеризований індекс зберігається в одному місці, а дані таблиці зберігаються в іншому місці. Це схоже на підручник, де вміст книги розташований в одному місці, а індекс - в іншому. Це дозволяє мати більше одного некластеризованого індексу на таблицю. Тут важливо згадати, що всередині таблиці дані будуть сортовані за кластерним індексом. Однак всередині некластеризованого індексу дані зберігаються у визначеному порядку. Індекс містить значення стовпців, на яких створюється індекс, та адресу запису, якому належить значення стовпця. Коли запит видається проти стовпця, на якому створено індекс, база даних спочатку перейде до індексу та шукає адреса відповідного рядка в таблиці. Потім він перейде до цієї адреси рядка та отримає інші значення стовпців. Саме завдяки цьому додатковому кроку некластеризовані індекси повільніше, ніж кластерні індекси

Відмінності між кластерним та некластерним індексом

  1. В таблиці може бути лише один кластерний індекс. Однак ви можете створити кілька некластеризованих індексів в одній таблиці.
  2. Кластеризовані індекси лише сортують таблиці. Тому вони не споживають додаткове зберігання. Некластеризовані індекси зберігаються в окремому місці від фактичної таблиці, вимагаючи більше місця для зберігання.
  3. Кластеризовані індекси швидші, ніж некластеризовані індекси, оскільки вони не передбачають додаткового кроку пошуку.

Для отримання додаткової інформації зверніться до цієї статті.

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