复合索引和包含列区别

1.如果搜索条件里有复合索引的第一个键列,则可能走该索引的seek

2.如果搜索条件里没有复合索引的第一个键列,但是有其他键列,如果指定使用该索引,那么只能是索引scan,比seek慢。

3.同样,如果搜索条件只包含include列,如果指定使用该索引,那么只能是索引scan

4.如果搜索条件包含复合索引的主列和其他列,那么走该索引的seek。

5.如果搜索条件包含索引主列和include列,那么也走该索引的seek,但是没有复合索引快。

6.为什么复合索引快?因为复合索引的所有列都可以存放在索引B树的任何节点,但是include列只能存在B树的叶子节点,也就是说复合索引可以很早就把数据过滤掉,而包含列需要到叶子才能过滤掉。

7.但也不是都要用复合索引,因为复合索引只能包含16个键列,900个字节,比如varchar(300)的列来3个就满了,include无此限制。

8.因此,只把搜索条件中的列放在复合索引里,而把需要查询的列放在include里,否则会产生key loopup。

9.此时索引会变很大,因为include多列,可以使用筛选索引来解决。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值