Создание некластеризованного индекса в SQL Azure занимает безумный объем памяти - PullRequest
0 голосов
/ 31 мая 2018

Я думал, что некластеризованный / логический индекс состоит только из указателей на фактические записи.

У меня есть таблица с кластеризованным индексом по первичному ключу (id), datetime и varchar(и несколько других столбцов, которые я не индексирую).

Я использовал команду:

CREATE INDEX Index_CreatedDesc_AccountAsc ON MyTable (Created desc, Account asc)

В таблице 500 миллионов записей.Я наблюдаю за показателями базы данных Azure в режиме реального времени, поскольку он создает индекс (пока он работает около 1 часа 30 минут).

Он начался с 111 ГБ, а теперь таблица увеличилась в размере до120GB.Почему он занимает так много места, если ему нужно только создать указатели на физические записи / страницы данных?

1 Ответ

0 голосов
/ 01 июня 2018

Это не просто указатели.В действительности, база данных SQL Azure и SQL Server создают сбалансированное дерево или b-дерево (точнее, дерево B-Plus), как описано в книге SQL Внутренние компоненты сервера .B-деревья начинаются с маленьких и идеально сформированных и красиво растут до огромных размеров.Если вы не будете дефрагментировать их регулярно, они могут фрагментироваться и потреблять больше места, как объяснено здесь .

...