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

Каковы различия между clustered и non-clustered index?

Ответы

Ответ 1

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

  • Только для таблицы
  • Быстрее читать, чем не кластерно, поскольку данные физически хранятся в порядке индекса

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

  • Может использоваться много раз для таблицы
  • Быстрее для операций вставки и обновления, чем кластеризованный индекс

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

Из-за более медленных индексов кластеров с добавлением и обновлением следует установить в поле, которое обычно является инкрементным, т.е. Id или отметка времени.

SQL Server обычно использует только индекс, если его избирательность выше 95%.

Ответ 2

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

Все остальные индексы должны быть некластеризованными. Некластеризованный индекс имеет дубликат данных из индексированных столбцов, которые упорядочены вместе с указателями на фактические строки данных (указатели на кластеризованный индекс, если они есть). Это означает, что доступ к данным через некластеризованный индекс должен проходить через дополнительный слой косвенности. Однако, если вы выбираете только те данные, которые доступны в индексированных столбцах, вы можете получить данные непосредственно из дублированных данных индекса (поэтому рекомендуется выбирать только те столбцы, которые вам нужны, а не использовать *)

Ответ 3

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

Некластеризованные индексы хранятся отдельно, и вы можете иметь столько, сколько хотите.

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

Ответ 4

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

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

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

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

Ответ 5

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

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

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

  • В таблице может быть любое количество некластеризованных индексов
  • Не влиять на физический порядок. Создайте логический порядок для строк данных и используйте указатели на файлы физических данных.
  • Вставка/обновление данных быстрее, чем кластеризованный индекс
  • Используйте дополнительное пространство для хранения логической структуры

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

Ответ 6

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

Unclustered означает, что это "только" логический порядок.

Ответ 7

Плюсы:

Кластерные индексы отлично работают для диапазонов (например, выберите * из my_table, где my_key между @min и @max)

В некоторых условиях СУБД не придется выполнять работу по сортировке, если вы используете оператор orderby.

Минусы:

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

Ответ 8

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

Некластерный индекс определяет логический порядок, который не соответствует физическому порядку на диске.

Ответ 9

Кластеризованный индекс - это, по существу, отсортированная копия данных в индексированных столбцах.

Основным преимуществом кластерного индекса является то, что когда ваш запрос (поиск) находит данные в индексе, для получения этих данных не требуется дополнительного ввода-вывода.

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

Ответ 10

Индексированная база данных состоит из двух частей: набора физических записей, которые расположены в некотором произвольном порядке, и набора индексов, которые идентифицируют последовательность, в которой записи должны быть прочитаны, чтобы получить результат, отсортированный по определенному критерию. Если нет никакой корреляции между физической компоновкой и индексом, то при чтении всех записей в порядке может потребоваться сделать много независимых операций записи одной записи. Поскольку база данных может считывать десятки последовательных записей за меньшее время, чем потребовалось бы для чтения двух несвязанных записей, производительность может быть улучшена, если записи, которые являются последовательными в индексе, также сохраняются последовательно на диске. Указание того, что индекс кластеризован, приведет к тому, что база данных приложит некоторые усилия (разные базы данных отличаются друг от друга), чтобы упорядочить вещи так, чтобы группы записей, которые последовательно в индексе будут последовательно на диске.

Например, если нужно начать с пустой некластеризованной базы данных и добавить 10 000 записей в случайной последовательности, записи, вероятно, будут добавлены в конце в том порядке, в котором они были добавлены. Чтение базы данных по порядку по индексу потребует 10000 однодисковых чтений. Однако, если кто-то будет использовать кластерную базу данных, система может проверить, добавляет ли каждая запись, сохранена ли предыдущая запись сама по себе; если он обнаружил, что это так, он может записать эту запись с новой в конце базы данных. Затем он мог посмотреть физическую запись перед слотами, в которых перемещались записи, которые были использованы, и посмотреть, была ли запись, которая последовали за ней, была сохранена сама по себе. Если бы он обнаружил, что это так, он может перенести эту запись на это место. Использование такого подхода приведет к тому, что многие записи будут сгруппированы вместе парами, что, возможно, почти удвоит скорость последовательного чтения.

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

Ответ 11

//Скопировано из MSDN, вторая точка некластеризованного индекса четко не упоминается в других ответах.

кластерный

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

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

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

Ответ 12

Вы могли пройти часть теории из приведенных выше постов:

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

-While, в некластеризованном индексе, он косвенно указывает на кластеризованный индекс, после чего он получит доступ к фактической записи, поскольку из-за его косвенной природы потребуется немного больше времени для доступа. Также ему требуется собственная память/пространство для хранения. индекс

enter image description here