【发布时间】:2011-02-24 20:39:30
【问题描述】:
这个问题是关于当插入完成时,聚集索引中数据的重组会发生什么。我认为在具有聚集索引的表上进行插入应该比没有聚集索引的表更昂贵,因为在聚集索引中重新组织数据涉及更改磁盘上数据的物理布局。除了通过我在工作中遇到的示例外,我不知道如何表达我的问题。
假设有一个表 (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 的更新)。这有意义吗?我认为第二种索引方法会更好,因为这意味着需要维护的索引更少。
如果您能深入了解这个具体示例或指导我了解有关维护聚集索引的更多信息,我将不胜感激。
【问题讨论】:
标签: sql sql-server indexing clustered-index