ИНДЕКС вопрос - PullRequest
       16

ИНДЕКС вопрос

2 голосов
/ 25 марта 2011

Привет, я новичок в SQL, и мне интересно, если кто-нибудь может сказать мне использование индекса CLUSTERED И NON CLUSTERED в той же колонке.я просматривал некоторые скрипты таблиц в своей работе, но не понимал, в чем польза наличия кластеризованных и некластеризованных индексов в одном столбце. в столбце идентификатора и во всех таблицах базы данных.

Ответы [ 2 ]

4 голосов
/ 25 марта 2011

Кластерный индекс на самом деле не является индексом - в том смысле, что все данные организованы в дереве в соответствии с ключом.

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

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

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

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

2 голосов
/ 25 марта 2011

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

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

При этом, конечно, вы можете иметь индексы CLUSTERED и NON CLUSTERED в одном и том же поле таблицы, и это полезнопотому что обычно индексы CLUSTERED особенно хороши для последовательного доступа к данным, в то время как индексы NON CLUSTERED могут быть оптимизированы для произвольного доступа к данным механизмом базы данных SQL.Таким образом, комбинация индексов CLUSTERED и NON CLUSTERED в одном столбце обеспечивает высоко оптимизированный доступ к записям в этой таблице при поиске по значениям в индексированном поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...