powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос относительно хранения данных при clustered index
7 сообщений из 7, страница 1 из 1
Вопрос относительно хранения данных при clustered index
    #32016010
Osya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во всех виденных мною местах (и в Book Online тоже) написано, что
"При наличии кластерного индекса, страницы в базе данных и строки внутри них размещаются в ключевой последовательности кластерного индекса. Все вставки выполняются по ключевому значению с сохранением последовательности ключей."
Я это трактую, как последовательное расположение данных таблицы в файле. Возникает вопрос. Я добавляю в таблицу n записей, согласно установленному кластерному индексу они должны находиться в начале таблицы. Сервер что, раздвигает остальные страницы с данными и запиивает новую страницу(цы) в середину? Если да, то как он справляется с такой нагрузкой -двигать сотни гигабайт? Если нет, то как на самом деле?
Приветствуются ссылки на документацию.
...
Рейтинг: 0 / 0
Вопрос относительно хранения данных при clustered index
    #32016015
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Документация - BOL:
\SQL Server Architecture\Database Architecture\Physical Database Architecture\Table and Index Architecture\Clustered Indexes
Кратко - речь идёт о логических блоках (страницах). При вставке в начало записи вставляются в дырки, если их нет, добавляется страница, если нет - экстент.
Наверное, так.
...
Рейтинг: 0 / 0
Вопрос относительно хранения данных при clustered index
    #32016017
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сотни гигабайт не двигаются, сколько данных приходится перемещать зависит от заполненности страниц, см. в BOL - Clustered indexes -> fill factor
...
Рейтинг: 0 / 0
Вопрос относительно хранения данных при clustered index
    #32016018
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Если да, то как он справляется с такой нагрузкой - двигать сотни гигабайт

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

База ~100 000 000 записей, ~30Gb
добавление 10 000 000 записей
- при наличии "непраильного" кластерного индекса - 6-7 часов(~100 000 записей должны попасть в середину таблиц)
- при наличии "правильного" кластерного индекса - 1-1.5 часов

Transaction log при наличии кластерного индекса то же растет до 8-10Gb.
...
Рейтинг: 0 / 0
Вопрос относительно хранения данных при clustered index
    #32016038
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные в базе данных хранятся в виде B-дерева. Структура B-дерева как раз расчитана на то, чтобы при логической упорядоченности данных физические их передвижки свести к минимуму. В общем и целом наличие кластерного индекса приводит к дополнительным потерям на перемещение данных, однако их бОльшая часть происходит лишь в пределах одной страницы данных.
Наличие индексов вообще (и некластерных в том числе) замедляет выполнение команд Update и Insert, хотя ускоряет выполнение команды select (да и то не всегда). На то и голова программистам, чтобы думать...
...
Рейтинг: 0 / 0
Вопрос относительно хранения данных при clustered index
    #32016049
Osya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет сотен гигабайт это я конечно прогорячился, на 3 порядка.
Сотни мегабайт конечно же. И еще добавлю, что интересует mssql 6.5.
Вставка в "дырки" внутри страниц это понятно, а вот нет дырок - добавляем страницу. Где физически будет расположена эта страница?
...
Рейтинг: 0 / 0
Вопрос относительно хранения данных при clustered index
    #32016051
Barbar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если нет "дырок" то выполняется операция, назывемая page split, т.е. создается еще одна страница половина данных остается на старой, а вторая половина переносится на новую. В образовавшуюся "дырку" будут занесены данные. Если размер вставляемых данных больше полученной "дырки", то page split повторяется. Физически новая страница будет в другом месте, а логически в соответствии с clustered index. Получается фрагментация данных. Потому Microsoft рекомендует время от времени перестраивать clustered index'ы для дефрагментации. Более того при update, если размер новых данных не помещается в место используемое записью (например при использоании varchar), то в реальности происходит delete и insert с page split. Самый плохой случай, когда используется неуникальный Clustered Index. Clustered Index существенно замедляет скорость модификации данных.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос относительно хранения данных при clustered index
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]