Iam*_*mIC 5 sql-server indexing database-design
请考虑SQL Server 2008中的下表:
LanguageCode varchar(10)
Language nvarchar(50)
Run Code Online (Sandbox Code Playgroud)
LanguageCode参与关系,因此我无法创建包含两列(LanguageCode,Language)的主键索引.
如果我在LanguageCode上放置一个主群集密钥,当然我不能在索引中包含语言(覆盖索引).这意味着我将不得不为Language创建第二个索引,或者冒着在其中包含重复项的风险(加上强制执行表扫描以检索其值).
此外,MS的文档(以及该主题的专家)表明理想情况下表应具有聚簇索引.
在这种情况下,非聚集覆盖索引(LanguageCode,Language)不仅可以确保语言是唯一的,而且可以避免表扫描.但是,没有"理想的"聚集索引.
这种没有聚集索引的情况实际上是理想的吗?
根据反馈进行修改:
我希望运行的唯一查询是:
SELECT Language, LanguageCode FROM Languages where Language="EN"
Run Code Online (Sandbox Code Playgroud)
根据定义,聚簇索引涵盖所有列.
如果您创建一个PRIMARY KEY CLUSTEREDon LanguageCode和UNIQUE INDEXon Language,它将允许您通过单个查找通过其代码和名称搜索语言,此外,使其成为Language唯一.
| 归档时间: |
|
| 查看次数: |
2735 次 |
| 最近记录: |