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

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

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

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

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

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

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


注意事项

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

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

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


索引选项

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

  • IGNORE_DUP_KEY

  • ONLINE

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

SQL点点滴滴_唯一索引设计指南-转载的更多相关文章

  1. SQL点点滴滴_聚集索引设计指南-转载

    聚集索引基于数据行的键值在表内排序和存储这些数据行, 每个表只能有一个聚集索引, 因为数据行本身只能按一个顺序存储. 有关聚集索引体系结构的详细信息, 请参阅 聚集索引结构. 每个表几乎都对列定义聚集 ...

  2. SQL点点滴滴_非聚集索引设计指南-转载

    非聚集索引包含索引键值和指向表数据存储位置的行定位器. 有关非聚集索引体系结构的详细信息, 请参阅 非聚集索引结构. 可以对表或索引视图创建多个非聚集索引. 通常, 设计非聚集索引是为改善经常使用的没 ...

  3. Sql Server系列:索引设计原则及优化

    1. 索引设计原则 索引设计不合理或缺少索引都会对数据库的性能造成障碍,高效的索引对于获得良好的性能非常重要. 设计索引时的一些原则: ◊ 索引并不是越多越好,一个表中如果有大量的索引,不仅占用大量的 ...

  4. SQL点点滴滴_查询类型和索引-转载

    当您考虑是否要对列创建索引时, 请估计在查询中使用列的方式, 下表介绍了索引对其有用的查询类型. 表中的示例基于 AdventureWorks2008R2 示例数据库, 在 SQL Server Ma ...

  5. SQL Server 索引设计指南

    https://msdn.microsoft.com/zh-cn/library/jj835095(v=sql.120).aspx#Nonclustered

  6. SQL点点滴滴_查看所有存储过程或视图的位置及内容

    代码:select a.name,a.[type],b.[definition] from sys.all_objects a,sys.sql_modules b where a.is_ms_ship ...

  7. SQL点点滴滴_特殊用法笔记

    声明: 本文为转载,感谢原作者的辛勤付出. 原博客地址为:http://www.cnblogs.com/icyJ/p/SQL_Statement.html 1.MERGE用法:关联两表,有则改,无则加 ...

  8. SQL点点滴滴_常用函数

    该文章转载自http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html 别人的总结,很详细. 以下所有例子均Studnet表为例 ...

  9. SQL Server的复合索引学习【转载】

      概要什么是单一索引,什么又是复合索引呢? 何时新建复合索引,复合索引又需要注意些什么呢?本篇文章主要是对网上一些讨论的总结. 一.概念 单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列 ...

随机推荐

  1. CentOS&.NET Core初试系列

    目的 对前段时间学习.NET Core的知识进行一次入门篇的总结,希望加深印象同时帮助刚学同学少走一些坑. 目录 CentOS的安装和网卡的配置 安装.NET Core SDK和发布网站 Nginx的 ...

  2. Js写九宫格抽奖

    国庆出去转了一圈,回来及时把以前写的一些有用的在这儿记录一下 --------------------------------------------我是分割线-------------------- ...

  3. MySQL子查询subquery

    子查询(Subquery)是指出现在其他SQL语句内的SELECT子句. 例如: select * from t1 where col1=(select col2 from t2); 其中select ...

  4. 在页面中嵌入svg的几种方法

    //在页面中嵌入svg的方法1:使用 <embed> 标签<embed> 标签被所有主流的浏览器支持,并允许使用脚本.注释:当在 HTML 页面中嵌入 SVG 时使用 < ...

  5. Maven是什么

    一.Maven是什么 Maven是一个Apache公司的开源项目,是项目构建工具.用来管理依赖. 1.Maven的好处 使用maven可以在项目中不用导入项目依赖的jar包,省去了下载和导入jar包的 ...

  6. 【c++】流状态的查询和控制

    源自 c++primer 4th, 248页 代码 #include <iostream> #include <limits> #include <stdexcept&g ...

  7. 移动端手势事件 hammer.JS插件

                      一.引入hammer.JS 1.下载地址:http://download.csdn.net/detail/webxiaoma/9872249 2.官网地址:http ...

  8. extern、 const、static的理解

    1.extern:是一个声明,用来告诉编译器其它文件中存在这个变量,可以拿到使用.是文件级的 2.static:   是一个文件内的声明,只能在本文件内使用,是文件中的(函数级的) 3.const   ...

  9. ComboBox ItemHeight 再高一点

    public static void BindData(this ComboBox box, List<KeyValuePair<long, string>> data) { ...

  10. 测试域名ping延迟脚本

    #!/bin/bash if [ $# -lt 1 ]thenecho "Usage:avg file1"exit 1fiecho "================== ...