Что на самом деле означает Кластерный и Некластерный индекс?

1120

Я имею ограниченную подверженность БД и использую только БД в качестве прикладного программиста. Я хочу знать о Clusteredи Non clustered indexes. Я погуглил и нашел:

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

То, что я нашел в SO, было: Каковы различия между кластеризованным и некластеризованным индексом? ,

Может кто-нибудь объяснить это простым английским языком?

PK
источник

Ответы:

1120

С кластеризованным индексом строки физически хранятся на диске в том же порядке, что и индекс. Следовательно, может быть только один кластерный индекс.

С некластеризованным индексом существует второй список, в котором есть указатели на физические строки. У вас может быть много некластеризованных индексов, хотя каждый новый индекс будет увеличивать время, необходимое для записи новых записей.

Как правило, быстрее читать из кластерного индекса, если вы хотите вернуть все столбцы. Вам не нужно идти сначала к индексу, а затем к таблице.

Запись в таблицу с кластеризованным индексом может быть медленнее, если есть необходимость перегруппировать данные.

Шираз Бхайджи
источник
44
Вы должны уточнить, что вы подразумеваете под «физически».
Спенсер Рупорт
143
физически, как в реальных битах, хранящихся на диске
Питер
18
См. Msdn «Когда вы создаете ограничение PRIMARY KEY, уникальный кластеризованный индекс для столбца или столбцов автоматически создается, если кластеризованный индекс в таблице еще не существует», что означает, что необязательно должен быть тот же столбец.
Мин
47
@ Пит, это не тот случай. SQL Server, безусловно, не гарантирует, что все файлы данных размещены в смежной физической области диска, и отсутствует фрагментация файловой системы. Это даже не правда, что кластерный индекс находится в порядке в файле данных. Степень, в которой это не так, является степенью логической фрагментации.
Мартин Смит
43
Просто быстрый комментарий, подтверждающий точку зрения Мартина Смита - кластерные индексы не гарантируют последовательное хранение на диске. Управление точным размещением данных на диске - задача ОС, а не СУБД. Но это предполагает, что элементы упорядочены в соответствии с ключом кластеризации. Это означает, что, если, например, размер БД увеличивается на 10 ГБ, ОС может принять решение о размещении этих 10 ГБ в виде блоков 5x2 ГБ в разных частях диска. Кластерная таблица, охватывающая 10 ГБ, будет храниться последовательно на каждом блоке 2 ГБ, однако эти блоки 2 ГБ НЕ МОГУТ быть последовательными.
шарики
602

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

Например, у вас есть две таблицы, Клиент и Заказ:

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

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

Если вы хотите быстро получить все заказы одного конкретного клиента, вы можете создать кластерный индекс в столбце «CustomerID» таблицы «Заказы». Таким образом, записи с одним и тем же CustomerID будут физически храниться близко друг к другу на диске (кластеризованно), что ускоряет их поиск.

PS Индекс CustomerID, очевидно, будет не уникальным, поэтому вам нужно либо добавить второе поле для «унификации» индекса, либо позволить базе данных обработать это для вас, но это уже другая история.

Относительно нескольких индексов. Вы можете иметь только один кластеризованный индекс на таблицу, потому что это определяет, как физически организованы данные. Если вы хотите провести аналогию, представьте себе большую комнату со множеством столов. Вы можете либо поместить эти таблицы в несколько строк, либо собрать их все вместе, чтобы сформировать большой конференц-стол, но не в обоих направлениях одновременно. Таблица может иметь другие индексы, которые затем будут указывать на записи в кластерном индексе, которые, в свою очередь, в конечном итоге скажут, где найти фактические данные.

csano
источник
4
При этом CI всегда следует использовать для PK
mko
4
Так с кластеризованным индексом это записи в индексе или таблице, которые хранятся близко друг к другу?
Caltor
5
@Caltor Стол. Индекс упорядочен по определению. Например, btree можно было бы упорядочить, чтобы можно было просто выполнять адресную арифметику для поиска. Идея кластера состоит в том, чтобы приспособить таблицу к производительности определенного индекса. Чтобы было ясно, записи таблицы будут переупорядочены в соответствии с порядком , в котором изначально находится индекс .
FLGMwt
9
@Caltor Совсем нет! Действительно, документация и само название вводят в заблуждение. Наличие «кластеризованного индекса» действительно имеет мало общего с индексом. Концептуально, что у вас действительно есть, это «таблица, кластеризованная по индексу x ».
FLGMwt
3
@ JohnOrtizOrdoñez: Конечно, вы можете использовать практически любые , которые никогда хранятся в построчно, так что нет XML, VARCHAR(MAX)или VARBINARY(MAX). Обратите внимание, что обычно имеет смысл сначала кластеризовать поле даты , так как кластеризованный индекс наиболее эффективен для сканирования диапазона, который наиболее распространен для типов даты. YMMV.
317

В хранилище, ориентированном на строки в SQL Server, как кластерные, так и некластерные индексы организованы в виде 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;

Я получил следующее

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

Если таблица не имеет кластеризованного индекса, она называется кучей.

Некластеризованные индексы могут быть построены либо на куче, либо на кластерном индексе. Они всегда содержат локатор строк обратно к базовой таблице. В случае кучи это физический идентификатор строки (rid) и состоит из трех компонентов (File: Page: Slot). В случае кластеризованного индекса указатель строки является логическим (ключ кластеризованного индекса).

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

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

Кластерные индексы uniquifierдобавляются для любых строк с ключевыми значениями, которые дублируют существующую строку. Это просто восходящее целое число.

Для некластеризованных индексов, не объявленных как уникальные, SQL Server автоматически добавляет локатор строк в ключ некластеризованного индекса. Это относится ко всем строкам, а не только к тем, которые на самом деле являются дубликатами.

Кластеризованная и некластерная номенклатура также используется для индексов хранилища столбцов. В статье Усовершенствования столбцов Stores SQL Server состояний

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

Мартин Смит
источник
8
@brainstorm Да, я знаю об этом. Вероятно, это из-за формулировки на этой странице MSDN, но чтобы увидеть, что формулировка там несколько вводит в заблуждение, вам просто нужно взглянуть на темы фрагментации
Мартин Смит
12
@brainstorm: Удивительно, как некоторые ложные утверждения повторяются как Евангелие. Кластеризованный означает, что, по крайней мере, с точки зрения последовательного чтения, было бы «желательно» физически хранить строки на диске в том же порядке, что и индекс , но это далеко от того, чтобы сказать, что это приведет к их фактическому храниться таким образом.
суперкат
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?
получил
8
@MartinSmith Теперь, сэр, это ответ. Я хотел бы видеть его в верхней части списка ответов, но, как говорится, «быстрое и простое» получает поддержку.
Вайтрафра
5
@Manachi этот ответ был дан через 5 лет после того, как был задан оригинальный вопрос. Цель этого состоит в том, чтобы исправить некоторые вводящие в заблуждение аспекты этих ответов. Причуды (ныне 8 лет) ФП не являются моей проблемой. Другие читатели могут оценить представление более низкого уровня.
Мартин Смит
150

Я понимаю, что это очень старый вопрос, но я решил предложить аналогию, чтобы проиллюстрировать прекрасные ответы выше.

КЛАСТЕРНЫЙ ИНДЕКС

Если вы войдете в публичную библиотеку, вы обнаружите, что все книги расположены в определенном порядке (скорее всего, десятичная система Дьюи, или DDS). Это соответствует «кластерному указателю» книг. Если бы DDS # для нужной вам книги был 005.7565 F736s, вы бы начали с поиска ряда книжных полок, которые помечены 001-099или что-то в этом роде. (Этот знак конечного колпачка в конце стека соответствует «промежуточному узлу» в индексе.) В конце концов, вы будете переходить к определенной полке с надписью 005.7450 - 005.7600, затем будете сканировать, пока не найдете книгу с указанным DDS #, и в В этот момент вы нашли свою книгу.

НЕКЛАСТЕРНЫЙ ИНДЕКС

Но если вы не вошли в библиотеку с запоминанием DDS # вашей книги, вам понадобится второй индекс, чтобы помочь вам. В старину перед библиотекой находилось замечательное бюро ящиков, известное как «Каталог карт». В нем были тысячи карточек 3х5 - по одной на каждую книгу, отсортированные по алфавиту (возможно, по названию). Это соответствует «некластеризованному индексу» . Эти каталоги карт были организованы в иерархическую структуру, так что каждый ящик был помечен диапазоном карт, которые он содержал ( Ka - Klнапример, «промежуточный узел»). Еще раз, вы будете углубляться в детали, пока не найдете свою книгу, но в этом случае, как только вы ее найдете (т. Е. «Листовой узел»), у вас нет самой книги,индексе (DDS #), с помощью которого вы можете найти фактическую книгу в кластерном индексе.

Конечно, ничто не помешает библиотекарю фотокопировать все карточки и сортировать их в другом порядке в отдельном каталоге карточек. (Обычно таких каталогов было как минимум два: один отсортирован по имени автора, а другой по названию.) В принципе, вы можете иметь столько «некластеризованных» индексов, сколько захотите.

kmote
источник
2
Я мог бы, возможно, расширить эту аналогию, чтобы описать «включенные» столбцы , которые можно использовать с некластерными индексами: можно представить карту в карточном каталоге, включающую в себя не только одну книгу, но вместо этого список всех опубликованных Версии книги, упорядоченные по дате публикации. Как и во «включенном столбце», эта информация хранится только на уровне листа (таким образом, сокращается количество карточек, которые должен создать библиотекарь).
kmote
1
отличная аналогия - действительно помогает визуализировать это!
Денис
71

Ниже приведены некоторые характеристики кластеризованных и некластеризованных индексов:

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

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

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

  1. Некластеризованные индексы похожи на простые индексы. Они просто используются для быстрого поиска данных. Не обязательно иметь уникальные данные.
Анируд Суд
источник
34
Одно небольшое исправление к пункту 1. Кластерный индекс не обязательно однозначно идентифицирует строки в таблице SQL. Это функция первичного ключа
Найджел
4
@ Найджел, ПЕРВИЧНЫЙ КЛЮЧ или УНИКАЛЬНЫЙ ИНДЕКС?
Анар Халилов
Практичный и прямой ответ, спасибо @Anirudh Sood
Оскар Ромеро
50

Очень простое нетехническое правило заключается в том, что кластерные индексы обычно используются для вашего первичного ключа (или, по крайней мере, уникального столбца), а некластеризованные используются для других ситуаций (возможно, внешнего ключа). , Действительно, SQL Server по умолчанию создаст кластерный индекс для столбцов первичного ключа. Как вы уже узнали, кластеризованный индекс относится к способу физической сортировки данных на диске, что означает, что это хороший универсальный выбор для большинства ситуаций.

Дэн Диплом
источник
47

Кластерный индекс

Кластерный индекс определяет физический порядок данных в таблице. По этой причине таблица имеет только 1 кластерный индекс.

  • « словарь » Нет необходимости в каком-либо другом индексе, его уже индекс по словам

Некластерный индекс

Некластеризованный индекс аналогичен индексу в Книге. Данные хранятся в одном месте. Индекс хранится в другом месте, и у индекса есть указатели на место хранения данных. По этой причине таблица имеет более 1 некластеризованного индекса.

  • В « Книге химии » при взгляде есть отдельный указатель для указания местоположения главы, а в «КОНЕЦ» есть еще один указатель, указывающий общее местоположение СЛОВ
Абдул Рехман КК
источник
6

Кластерный индекс

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

Единственный раз, когда строки данных в таблице хранятся в отсортированном порядке, это когда таблица содержит кластерный индекс. Когда таблица имеет кластеризованный индекс, она называется кластерной таблицей. Если таблица не имеет кластеризованного индекса, ее строки данных хранятся в неупорядоченной структуре, называемой кучей.

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

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

Вы можете добавить неключевые столбцы на конечный уровень некластеризованного индекса, чтобы обойти существующие ограничения ключа индекса и выполнить полностью покрытые, проиндексированные запросы. Для получения дополнительной информации см. Создание индексов с включенными столбцами. Подробные сведения об ограничениях ключа индекса см. В разделе Характеристики максимальной емкости для SQL Server.

Ссылка: https://docs.microsoft.com/en-us/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described

marvelTracker
источник
4

Позвольте мне предложить определение учебника по «индексу кластеризации», которое взято из 15.6.1 из Системы баз данных: Полная книга :

Мы также можем говорить о кластеризованных индексах , которые являются индексами атрибута или атрибутов, так что все кортежи с фиксированным значением для ключа поиска этого индекса появляются примерно на нескольких блоках, которые могут их содержать.

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

Отношение R(a,b), которое отсортировано по атрибуту aи сохранено в таком порядке, упаковано в блоки, обязательно кластеризовано. Индекс on aявляется индексом кластеризации, поскольку для данного aзначения a1 все кортежи с этим значением aявляются последовательными. Таким образом, они выглядят упакованными в блоки, за исключением, возможно, первого и последнего блоков, которые содержат a-value a1, как показано на рис.15.14. Тем не менее, индекс на b вряд ли будет кластеризованным, так как кортежи с фиксированным bзначением будут распространяться по всему файлу, если только значения aи bне очень тесно связаны.

Рис 15.14

Обратите внимание, что определение не требует, чтобы блоки данных были смежными на диске; он только говорит, что кортежи с ключом поиска упакованы в как можно меньше блоков данных.

Родственное понятие - кластерное отношение . Отношение «кластеризовано», если его кортежи упакованы примерно в несколько блоков, которые могут содержать эти кортежи. Другими словами, с точки зрения дискового блока, если он содержит кортежи из разных отношений, то эти отношения не могут быть кластеризованы (т. Е. Существует более упакованный способ хранения такого отношения путем замены кортежей этого отношения из других дисковых блоков с помощью кортежи не принадлежат отношению в текущем блоке диска). Понятно, что R(a,b)в приведенном выше примере это кластеризация.

Чтобы соединить две концепции вместе, кластеризованное отношение может иметь индекс кластеризации и индекс некластеризации. Однако для некластеризованного отношения кластеризованный индекс невозможен, если индекс не построен поверх первичного ключа отношения.

«Кластер» как слово является спамом на всех уровнях абстракции стороны хранения базы данных (три уровня абстракции: кортежи, блоки, файл). Концепция под названием « кластерный файл» », которая описывает, содержит ли файл (абстракция для группы блоков (один или несколько дисковых блоков)) кортежи из одного отношения или разных отношений. Это не относится к концепции индекса кластеризации, как на уровне файлов.

Однако некоторым учебным материалам нравится определять индекс кластеризации на основе определения кластеризованного файла. Эти два типа определений одинаковы на уровне кластеризованных отношений, независимо от того, определяют ли они кластеризованные отношения в терминах блока данных или файла. По ссылке в этом абзаце

Индекс для атрибута (ов) A в файле является индексом кластеризации, когда: Все кортежи со значением атрибута A = a хранятся последовательно (= последовательно) в файле данных

Последовательное хранение кортежей - это то же самое, что сказать, что «кортежи упакованы примерно в несколько блоков, которые могут содержать эти кортежи» (с небольшой разницей, когда один говорит о файле, а другой говорит о диске). Это потому, что последовательное хранение кортежей - это способ достичь «упакованного в примерно столько блоков, сколько может вместить эти кортежи».

xxks-KKK
источник
3

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

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

Абхишек Дуппати
источник
2

Кластерный индекс - кластерный индекс определяет порядок , в котором данные физически хранятся в таблице. Табличные данные могут быть отсортированы только одним способом, поэтому в таблице может быть только один кластеризованный индекс. В SQL Server ограничение первичного ключа автоматически создает кластеризованный индекс для этого конкретного столбца.

Некластерный индекс- Некластеризованный индекс не сортирует физические данные внутри таблицы. Фактически некластеризованный индекс хранится в одном месте, а данные таблицы хранятся в другом месте. Это похоже на учебник, где содержание книги находится в одном месте, а указатель - в другом. Это позволяет использовать более одного некластеризованного индекса на таблицу. Здесь важно упомянуть, что внутри таблицы данные будут отсортированы по кластерному индексу. Однако внутри некластеризованного индекса данные хранятся в указанном порядке. Индекс содержит значения столбцов, для которых создается индекс, и адрес записи, которой принадлежит значение столбца. Когда выдается запрос к столбцу, для которого создается индекс, база данных сначала переходит к индексу и ищет адрес соответствующей строки в таблице. Затем он перейдет к этому адресу строки и получит другие значения столбца. Именно благодаря этому дополнительному шагу некластеризованные индексы работают медленнее, чем кластеризованные индексы.

Различия между кластерным и некластеризованным индексом

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

Для получения дополнительной информации обратитесь к этой статье.

Сантхопа Джаявардхана
источник