代码改变世界

索引 - 唯一索引设计指南

2013-02-19 16:31  BIWORK  阅读(729)  评论(0编辑  收藏  举报

唯一索引能够保证索引键中不包含重复的值, 从而使表中的每一行从某种方式上具有唯一性, 只有当唯一性是数据本身的特征时, 指定唯一索引才有意义. 例如, 如果您希望确保 HumanResources.Employee 表的 NationalIDNumber 列中的值唯一, 当主键为 EmployeeID 时, 可以为 NationalIDNumber 列创建一个 UNIQUE 约束. 如果用户尝试在该列中为多个雇员输入相同的值, 将显示错误消息并且不能输入重复的值. 

使用多列唯一索引, 索引能够保证索引键中值的每个组合都是唯一的. 例如, 如果为 LastNameFirstName  MiddleName 列的组合创建了唯一索引, 则表中的任意两行都不会有这些列值的相同组合. 

聚集索引和非聚集索引都可以是唯一的, 只要列中的数据是唯一的, 就可以为同一个表创建一个唯一聚集索引和多个唯一非聚集索引.

唯一索引的优点包括下列几点:

  • 能够确保定义的列的数据完整性.

  • 提供了对查询优化器有用的附加信息.

创建 PRIMARY KEY 或 UNIQUE 约束会自动为指定的列创建唯一索引. 创建 UNIQUE 约束和创建独立于约束的唯一索引没有明显的区别, 数据验证的方式是相同的, 而且查询优化器不会区分唯一索引是由约束创建的还是手动创建的. 但是, 如果您的目的是要实现数据完整性, 则应为列创建 UNIQUE 或 PRIMARY KEY 约束, 这样做才能使索引的目标明确. 


注意事项

  • 如果数据中存在重复的键值, 则不能创建唯一索引, UNIQUE 约束或 PRIMARY KEY 约束. 

  • 如果数据是唯一的并且您希望强制实现唯一性, 则为相同的列组合创建唯一索引而不是非唯一索引可以为查询优化器提供附加信息, 从而生成更有效的执行计划. 在这种情况下, 建议创建唯一索引(最好通过创建 UNIQUE 约束来创建).

  • 唯一非聚集索引可以包括包含性非键列, 有关详细信息,请参阅 具有包含列的索引 .


索引选项

创建唯一索引时, 可以指定若干索引选项, 特别要注意下列选项:

  • IGNORE_DUP_KEY

  • ONLINE

有关详细信息, 请参阅 设置索引选项