【发布时间】:2011-05-09 07:00:41
【问题描述】:
考虑一下 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"
【问题讨论】:
-
您的语言表会参与联接吗?
-
@Quassnoi 是的 - 它将加入 LanguageCode(匹配其关系)
标签: sql-server database-design indexing