唯一索引能够保证索引键中不包含重复的值, 从而使表中的每一行从某种方式上具有唯一性, 只有当唯一性是数据本身的特征时, 指定唯一索引才有意义. 例如, 如果您希望确保 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. Python学习 day15

    一.内置函数(共68个) 1.作用域相关(2) locals(*args, **kwargs)  --  返回本地作用域中的所有名字 globals(*args, **kwargs)  --  返回全 ...

  2. Python学习 day09

    一.文件的修改 python中修改文件,可以直接通过write实现,但这种方法均比较局限.若有需求:将文件中的某内容替换为新内容,其他内容保持不变.这种需求write理论上是可以实现的,可以将一个文件 ...

  3. CSAPP阅读笔记-数组分配与访问-来自第三章3.8的笔记-P176-P183

    这一节比较简单,仅记录几个比较重要的点: 1.C语言允许对指针进行运算,计算出的值会根据该指针引用的数据类型大小进行伸缩. 例子: 其中,xE是数组的起始地址.注意,指针运算时,若最终结果为指针,则指 ...

  4. Java获取永久图文素材中的网页端Url

    package com.epalmpay.test; import com.alibaba.fastjson.JSON;import com.epalmpay.util.HttpClientUtil; ...

  5. Linux 中的rsh,ssh

    第一部分 rsh 的安装与配置 http://www.ttlsa.com/linux/configure-rsh-rcp-scp-on-centos/ http://www.ahlinux.com/s ...

  6. SqlHelper中SqlHelperParameterCache类的用法介绍

    SqlHelper类中提供了三种可以用来管理SqlParameter参数的共享方法.下面来一一讲解: 1.CacheParameterSet 将SqlParameter参数数组存储到本地缓存中 2.G ...

  7. MySQL限制查询结果返回的数量limit

    1限制查询结果 [limit {[offset,] row_count | row_count offset}] row_count 起始行(第一行是0) offset 偏移量 输出几行记录

  8. MySQL查询操作select

    查找记录 SELECT select_expr [,select_expr ...] [ FROM table_references(表的参照) [WHERE where_condition](条件) ...

  9. HTML <a>标签的使用

    <a></a>标签称作链接标记,由<a>与</a>所围的文字.图片等可以作为一个链接 Eg:<a href="index.html&qu ...

  10. 1.Windows服务-->添加一个简单的服务

    Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合.它没有用户界面,并且也不会产生任何可视输出.任何用户消息都会被 写进Windows事件日志.计算机启动时,服务会自动开 ...