SQL Azure上的非聚集索引创建占用了大量的存储空间

时间:2018-05-31 16:44:22

标签: indexing azure-sql-database

我认为非聚集/逻辑索引只包含指向实际记录的指针。

我在主键(id)上有一个聚集索引的表,一个日期时间和一个varchar(还有一些我没有编入索引的其他列)。

我使用了命令:

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

该表有5亿条记录。我在创建索引时实时观察Azure数据库指标(到目前为止,它已经运行了大约1小时30分钟)。

它起始于111GB,现在该表的大小已增加到120GB。如果它只需要创建指向物理记录/数据页的指针,它为什么占用这么多空间?

1 个答案:

答案 0 :(得分:1)

这不仅仅是指针。实际上,Azure SQL数据库和SQL Server正在创建一个平衡的树或b树(更确切地说是一个B-Plus树),如SQL Server Internals书中所述。 B树开始小而且完美地形成并且很好地生长到巨大的尺寸。如果您不定期对它们进行碎片整理,则可能会出现碎片并消耗更多空间,如here所述。