标签:
当主键创建时如果不设置为聚集索引,那么就一定是唯一的非聚集索引。实际上,唯一索引,故名思议就是它要求该列上的值是唯一的。唯一索引能够保证索引键中不包含重复的值,从而使表中的每一行从某种方式上具有唯一性。 创建 UNIQUE 约束和创建与约束无关的唯一索引并没有明显的区别。进行数据验证的方式相同,而且对于唯一索引是由约束创建的还是手动创建的,查询优化器并不加以区分。 但是,创建列的 UNIQUE 约束会使索引目标更清晰。 Unique Constraints and Check Constraints." xml:space="preserve" id="mt6">在创建唯一索引时,可以设置一个忽略重复键的选项。 Yes and you attempt to create duplicate keys by adding data that affects multiple rows (with the INSERT statement), the row containing a duplicate is not added." xml:space="preserve" id="mt8">如果此选项已设置为“是”,当您试图通过添加影响多行的数据来创建重复键(使用 INSERT 语句)时,则不会添加包含重复项的行; No, the entire insert operation fails and all the data is rolled back." xml:space="preserve" id="mt9">如果此选项设置为“否”,则整个插入操作将失败,并且将回滚所有数据。
唯一索引的优点
唯一索引可通过以下方式实现:
在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创建唯一聚集索引。 主键列不允许空值。
在创建 UNIQUE 约束时,默认情况下将创建唯一非聚集索引,以便强制 UNIQUE 约束。 如果不存在该表的聚集索引,则可以指定唯一聚集索引。
独立于约束的索引可以为一个表定义多个唯一非聚集索引。
若要创建索引视图,请对一个或多个视图列定义唯一聚集索引。 视图将执行,并且结果集存储在该索引的页级别中,其存储方式与表数据存储在聚集索引中的方式相同。
唯一索引依赖于唯一约束,删除唯一索引必须删除唯一约束。另外SQL Server又在建立唯一约束时又默认建立唯一索引。
过滤唯一索引,当我们需要既允许多个NULL值,又不允许重复的时候,可以使用这个:
CREATE UNIQUE NONCLUSTERED INDEX xx on
ProductDemo(<索引列>) --指定索引列
where <索引列>!=null) --过滤条件
对于用以上语法创建的唯一索引,插入时,只有当唯一索引列不为NULL的时候才检测重复。换句话说,以上表的索引列允许多个NULL值。
筛选索引是一种经过优化的非聚集索引,尤其适用于涵盖从定义完善的数据子集中选择数据的查询。 筛选索引使用筛选谓词对表中的部分行进行索引。 与全表索引相比,设计良好的筛选索引可以提高查询性能、减少索引维护开销并可降低索引存储开销。
筛选索引与全表索引相比具有以下优点:
设计良好的筛选索引可以提高查询性能和执行计划质量,因为它比全表非聚集索引小并且具有经过筛选的统计信息。 与全表统计信息相比,经过筛选的统计信息更加准确,因为它们只涵盖筛选索引中的行。
仅在数据操作语言 (DML) 语句对索引中的数据产生影响时,才对索引进行维护。 与全表非聚集索引相比,筛选索引减少了索引维护开销,因为它更小并且仅在索引中的数据更改时才进行维护。 筛选索引的数量可以非常多,特别是在其中包含很少更改的数据时。 同样,如果筛选索引只包含频繁修改的数据,则索引大小较小时可以减少更新统计信息的开销。
在没必要创建全表索引时,创建筛选索引可以减少非聚集索引的磁盘存储开销。 可以使用多个筛选索引替换一个全表非聚集索引而不会明显增加存储需求。
限制和局限
不能对视图创建筛选索引。 但是,查询优化器可以从对视图中引用的表定义的筛选索引中获益。 对于从视图中选择数据的查询,如果查询结果正确,查询优化器会考虑对此查询使用筛选索引。
筛选索引与索引视图相比,具有以下优点:
筛选索引是针对一个表定义的,仅支持简单比较运算符。 如果需要引用多个表或具有复杂逻辑的筛选表达式,则应创建视图。
标签:
原文地址:http://www.cnblogs.com/terrence/p/4607374.html