Интервьюер спросил меня, в чем разница между кластеризованным и некластеризованным индексом, а затем перешел в него и задал еще один вопрос: когда таблица имеет кластеризованный индекс и некластеризованный индекс, указывает ли некластеризованный индекс на строку данных в таблице? Я сказал «да» и сразу подумал, что это неправильно. Указывает ли он на строку данных, упорядоченную по кластеризованному индексу, или на исходные строки данных? Может кто-нибудь пролить свет на это, пожалуйста.
Кластерный и некластеризованный индекс
Ответы (2)
Некластеризованный индекс не сортирует физические данные внутри таблицы. Фактически, некластеризованный индекс хранится в одном месте, а данные таблицы хранятся в другом месте. Это похоже на учебник, где содержание книги находится в одном месте, а указатель - в другом. Это позволяет использовать более одного некластеризованного индекса для каждой таблицы. Здесь важно отметить, что внутри таблицы данные будут отсортированы по кластеризованному индексу. Однако внутри некластеризованного индекса данные хранятся в указанном порядке. Индекс содержит значения столбцов, по которым создается индекс, и адрес записи, которой принадлежит значение столбца.
Когда выполняется запрос к столбцу, в котором создается некластеризованный индекс, база данных сначала переходит к некластеризованному индексу и ищет адрес соответствующей строки в таблице. Затем он перейдет к адресу этой строки и получит другие значения столбца. Из-за этого дополнительного шага некластеризованные индексы работают медленнее, чем кластеризованные.
Фактическая таблица хранится в порядке столбца кластеризованного индекса. Столбец ключа некластеризованного индекса хранится в другой таблице, кроме самой таблицы.
Ниже есть хорошая статья о кластеризованном и некластеризованном индексе:
она даст вам хорошее представление об индексировании:
http://www.sqlservercentral.com/blogs/practicalsqldba/2013/03/14/sql-server-part-4-объясняющий-некластеризованный-индекс-структура-/
Как некластеризованный индекс работает в SQL Server