SQL Server性能优化(15)选择合适的索引
2015-05-25 11:00
316 查看
一、关于聚集索引列的选择(参考)
1. 聚集索引所在的列,或者列的组合最好是唯一的。
当我们创建的聚集索引的值不唯一时,SQL Server则无法仅仅通过聚集索引列(也就是关键字)唯一确定一行。此时,为了实现对每一行的唯一区分,则需要SQL Server为相同值的聚集索引列生成一个额外的标识信息进行区分,这也就是所谓的uniquifiers。而使用了uniquifier后,对性能产生的影响分为如下两部分:
a. SQL Server必须在插入或者更新时对现在数据进行判断是否和现有的键重复,如果重复,则需要生成uniquifier,这个是一笔额外开销。
b. 因为需要对相同值的键添加额外的uniquifier来区分,因此键的大小被额外的增加了。因此无论是叶子节点和非叶子节点,都需要更多的页进行存储。从而还影响到了非聚集索引,使得非聚集索引的书签列变大,从而使得非聚集索引也需要更多的页进行存储。
2. 最好使用窄列或者窄列组合作为聚集索引列。原理同上。
3. 使用值很少变动的列或列的组合作为聚集索引列
a. 变动时,会造成页面重新排序,产生分页。
b. 会产生碎片。
c. 会引起非聚集索引的RID查找发生改变
4. 最好用自增列作为索引列。
参考:
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聚集索引键的选择相关文章推荐
- SQL Server 性能优化实战系列(文章索引) : 桦仔
- SQL Server 查询性能优化——创建索引原则(一)
- 转:SQL Server 查询性能优化——创建索引原则(一)
- SQL Server 查询性能优化――堆表、碎片与索引
- 从性能的角度谈SQL Server聚集索引键的选择
- 从性能的角度谈SQL Server聚集索引键的选择
- SQL Server现场优化纪实(一):通过重建索引提高性能
- SQL Server 查询性能优化——堆表、碎片与索引(二)
- Sql Server查询性能优化之创建合理的索引(下篇)
- SQL Server 查询性能优化――堆表、碎片与索引(二)
- SQL Server 查询性能优化——创建索引原则(一)
- 从性能的角度谈SQL Server聚集索引键的选择
- 根据DB引擎选择合适的索引进行查询优化
- SQL Server 查询性能优化——索引与SARG(四)
- 索引=SQL Server 查询性能优化——创建索引原则(一)
- Sql Server优化之索引提示----我们为什么需要查询提示,Sql Server默认情况下优化策略选择的不足
- SQL Server 查询性能优化——堆表、碎片与索引(二)
- Sql Server查询性能优化之走出索引的误区
- SQL Server 查询性能优化——创建索引原则(一)
- SQL Server 查询性能优化——创建索引原则(一)