sql-server - 聚集索引与覆盖索引

标签 sql-server database-design indexing

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

相关文章:

sql-server - SQL Server 中的 REGEXP_SUBSTR 等效项

mysql - 如何为POS系统设计出色的数据库结构

ruby-on-rails - Rails 中的多列索引顺序

python - 解决问题 - 编码面试问题?

python - 在多索引上使用切片器

SQL 日期逻辑 - 查找之前的*非标准*季度

sql-server - SSRS 中默认 View 为 'Tile View'

c# - 如何以编程方式测试 SQL Server 是否支持 'AT TIME ZONE' ?

mysql - 在 Top 10 的数据库设计方面需要帮助

database-design - 与 "default"子实例的一对多关系