SQL Server性能优化(15)选择合适的索引

一、关于聚集索引列的选择(参考)

1. 聚集索引所在的列,或者列的组合最好是唯一的。

当我们创建的聚集索引的值不唯一时,SQL Server则无法仅仅通过聚集索引列(也就是关键字)唯一确定一行。此时,为了实现对每一行的唯一区分,则需要SQL Server为相同值的聚集索引列生成一个额外的标识信息进行区分,这也就是所谓的uniquifiers。而使用了uniquifier后,对性能产生的影响分为如下两部分:

a. SQL Server必须在插入或者更新时对现在数据进行判断是否和现有的键重复,如果重复,则需要生成uniquifier,这个是一笔额外开销。

b. 因为需要对相同值的键添加额外的uniquifier来区分,因此键的大小被额外的增加了。因此无论是叶子节点和非叶子节点,都需要更多的页进行存储。从而还影响到了非聚集索引,使得非聚集索引的书签列变大,从而使得非聚集索引也需要更多的页进行存储。

2. 最好使用窄列或者窄列组合作为聚集索引列。原理同上。

3. 使用值很少变动的列或列的组合作为聚集索引列

a. 变动时,会造成页面重新排序,产生分页。

b. 会产生碎片。

c. 会引起非聚集索引的RID查找发生改变

4. 最好用自增列作为索引列。

参考:

1. T-SQL查询高级--理解SQL SERVER中非聚集索引的覆盖,连接,交叉和过滤,文章以图标的方式描述,思路清晰,便于理解。

2. 从性能的角度谈SQL Server聚集索引键的选择

上一篇:洛谷 P1908 逆序对


下一篇:HDU 1518 Square(DFS)