Мне трудно понять, что такое кластеризованный индекс в SQL Server 2005. Я прочитал статью MSDN Структуры кластерного индекса (среди прочего), но я все еще не уверен, правильно ли я понимаю.
(основной) вопрос: что произойдет, если я вставлю строку (с ключом "low") в таблицу с кластеризованным индексом?
Вышеупомянутая статья MSDN гласит:
Страницы в цепочке данных и строки в них упорядочены по значению ключа кластеризованного индекса.
И Использование кластерных индексов , например, состояния:
Например, если запись добавляется в таблицу, которая находится близко к началу последовательно упорядоченного списка, любые записи в таблице после этой записи должны будут сдвигаться, чтобы можно было вставить запись.
Означает ли это, что если я вставлю строку с очень «низким» ключом в таблицу, в которой уже есть ряд миллиардов буквально , то все строки физически сместятся на диске? Я не могу поверить, что. Это заняло бы целую вечность, нет?
Или, скорее всего (как я подозреваю), есть два сценария, в зависимости от того, насколько «полна» первая страница данных.
- A) Если на странице достаточно свободного места для размещения записи, она помещается на существующую страницу данных, и данные могут (физически) переупорядочиваться на этой странице .
- B) Если на странице недостаточно свободного места для записи, будет создана новая страница данных ( в любом месте на диске! ) и «привязана» к передней части уровня листа В-дерево?
Это будет означать, что «физический порядок» данных ограничивается «уровнем страницы» (т.е. на странице данных), но не страницами, расположенными в последовательных блоках на физическом жестком диске. Страницы данных затем просто связываются вместе в правильном порядке.
Или сформулированный альтернативным способом: если SQL Server необходимо прочитать первые N строк таблицы с кластеризованным индексом, он может читать страницы данных последовательно (по ссылкам) , но эти страницы не являются (обязательно) Последовательность блоков на диске (поэтому головка диска должна перемещаться «случайно»).
Как близко я? :)