【问题标题】:Unique vs NonUnique Clustered Index to speed searches on a NonUnique field唯一与非唯一聚集索引可加快对非唯一字段的搜索
【发布时间】:2014-01-23 11:30:55
【问题描述】:
我有一百万行数据集,我经常将其加入 A 列。
为了加快加入速度,我将在 A 列上创建一个聚集索引。
A 列不是唯一的,但(A 列,B 列)是唯一的配对。
我永远不会在 where 子句或连接中使用 B 列。
是只在 A 列上创建非唯一聚集索引还是在(A 列、B 列)上创建唯一聚集索引更好?
【问题讨论】:
标签:
sql
sql-server
tsql
indexing
【解决方案1】:
您将在 A,B 上创建唯一索引以强制值的唯一性。这是在数据库级别强制执行的,因此您将无法向数据库中插入重复值。
唯一索引可用于解析需要索引中第一列但不一定全部的查询。因此,唯一索引适用于 A 上的查询。
我会说创建唯一索引。有两件事要记住。第一个是如果B 是一个大数据类型——比如char(500)。这些值存储在索引中,因此包含B 可能会使索引变得相当大。
其次,如果数据不是按A, B 顺序插入的,那么将其设为聚集索引可能会导致插入和删除的性能开销。新插入最终会出现在随机页面上,该页面可能会被填充,然后需要拆分(或者您可以使用页面的填充因子为插入保留额外空间,但代价是最初会使表格更大)。