Указатели строк SQL Server - PullRequest
0 голосов
/ 11 июня 2019

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

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

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

Если это имеет значение, я использую SQL Server в качестве базового механизма.

1 Ответ

5 голосов
/ 11 июня 2019

В этом случае все некластеризованные индексы будут перестроены, поэтому все указатели будут заменены.
Если быть точным, если у вас есть кластеризованный индекс в таблице (не обязательно должен быть уникальным), SQL Server будет хранить кластеризованныезначение ключа (плюс необязательный unquier) вместо указателя строки.

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

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