考虑 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"
最佳答案
根据定义,聚集索引涵盖所有列。
如果您在 LanguageCode
上创建一个 PRIMARY KEY CLUSTERED
并在 Language
上创建一个 UNIQUE INDEX
,它将允许您可以通过一次查找通过代码和名称来搜索语言,此外,还可以使Language
唯一。
关于sql-server - 聚集索引与覆盖索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4168634/