请考虑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/

10-10 18:11