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