这个问题是关于在插入完成后重新组织聚集索引中的数据会发生什么。我认为在具有聚集索引的表上进行插入应该比没有聚集索引的表更昂贵,因为在聚集索引中重新组织数据涉及更改磁盘上数据的物理布局。除了通过我在工作中遇到的示例外,我不确定如何表达我的问题。
假设有一个表 (Junk),并且在表上执行了两个查询,第一个查询按名称搜索,第二个查询按名称和某事搜索。当我在处理数据库时,我发现该表已经创建了两个索引,一个用于支持每个查询,如下所示:
--drop table Junk1
CREATE TABLE Junk1
(
Name char(5),
Something char(5),
WhoCares int
)
CREATE CLUSTERED INDEX IX_Name ON Junk1
(
Name
)
CREATE NONCLUSTERED INDEX IX_Name_Something ON Junk1
(
Name, Something
)
现在,当我查看这两个索引时,似乎 IX_Name 是多余的,因为任何希望按名称搜索的查询都可以使用 IX_Name_Something。所以我会消除 IX_Name 并使 IX_Name_Something 成为聚集索引:
--drop table Junk2
CREATE TABLE Junk2
(
Name char(5),
Something char(5),
WhoCares int
)
CREATE CLUSTERED INDEX IX_Name_Something ON Junk2
(
Name, Something
)
有人建议应该保留第一个索引方案,因为它会导致更有效的插入/删除(假设无需担心 Name 和 Something 的更新)。这有意义吗?我认为第二种索引方法会更好,因为这意味着需要维护的索引更少。
我将不胜感激对这个特定示例的任何见解或指导我了解有关维护聚集索引的更多信息。