请考虑SQL Server 2008中的下表:
LanguageCode varchar(10)
Language nvarchar(50)
LanguageCode参与关系,因此我无法创建同时包含两个列(LanguageCode,Language)的主键索引。
如果将主群集键放在LanguageCode上,则当然不能在索引(覆盖索引)中包含Language。这意味着我将不得不为Language创建第二个索引,否则就有冒重复的风险(而且还要强制进行表扫描以检索其值)。
此外,MS的文档(以及该主题的专家)指出,表最好是具有聚集索引。
在这种情况下,非群集覆盖索引(LanguageCode,Language)不仅可以确保Language是唯一的,而且可以避免表格扫描。但是,将没有“理想的”聚集索引。
实际上,这是没有聚簇索引的那些情况之一吗?
根据反馈进行编辑:
我希望运行的唯一查询是:
SELECT Language, LanguageCode FROM Languages where Language="EN"
最佳答案
根据定义,聚集索引涵盖所有列。
如果您在PRIMARY KEY CLUSTERED
上创建LanguageCode
,在UNIQUE INDEX
上创建Language
,则将允许您通过一次查询同时按语言和名称来搜索一种语言,并使Language
唯一。
关于sql-server - 聚类与覆盖指数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4168634/