[sql server] 组合索引的一些tips

组合索引的一些tips

1,定义

索引基于一列或多列,指定两个或多个列名,可为指定列的组合值创建组合索引。一般情况下,组合索引也是覆盖索引(covering
index)。一般而言,组合索引(覆盖索引除外)应该尽量避免,因为组合索引会占用更多的空间,读取的时候需要更多的IO和CPU时间,进而影响性能。

要使用组合索引的主要目的是增强索引的选择性,而增强选择性,最终还是要落到数据库设计上,而不是通过创建组合索引来实现。

如果确实需要创建组合索引,应该尽可能的让索引变得轻量,因为这将会减少索引的大小,进而减少IO读写,提高性能。

2。何时使用

组合索引通常仅在查询语句中的WHERE条件使用了组合索引最左边的列时会最有用。例如对city,state创建了组
合索引,如果查询语句的where条件为WHERE CITY
=‘xiamen',将会使用到该组合索引,但WHERE STATE='China'将不会使用到该索引。

但即使是WHERE条件没有指定组合索引的第一列,但如果该组合索引包含了查询语句中所涉及到的列,查询优化
器也会使用该组合索引,因为这是一个覆盖索引(covering index)

3。列的顺序
当创建了一个组合索引时,列的顺序是非常关键的,尽量让高选择性的列放在组合索引的最左端。如果把低选
择性的列放在最左端,可能会造成无法使用该索引的情况。所谓的高选择性,一般指不重复值达到95%

4。组合索引和单列索引

有时候,将组合索引划分为单列索引是个很好的方法,因为对于组合索引而言,只有第一列具备统计信息,因
此,如果该列的选择性不高,查询优化器就不会使用到该索引。如果划分为单列索引时,每列上都有统计信
息,查询优化器会有更多的选择,生成更好的执行计划。

但这并不意味着多个单列索引总比组合索引好,需要通过测试,才能得出结果。

5.    需要注意的情况

上面几点提到了组合索引的第一列需要使用高选择性的。但在创建多列主键或唯一约束时,系统会默认对创建
约束的列建立索引,这个时候的组合索引的选择性可能并不是很好,需要手工修改,把高选择性的列放在第一
位。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值