联合索引最左原则原理_说说数据库索引和MySQL的最左前缀匹配原则

组合索引

也就是说一个索引包含了多个列。

最左前缀原则:

建立多列索引(组合索引)有最左前缀的原则,即最左优先,比如:

如果有一个2列的索引(col1,col2),则已经对(col1)、(col1,col2)上建立了索引;

如果有一个3列索引(col1,col2,col3),则已经对(col1)、(col1,col2)、(col1,col2,col3)上建立了索引;

组合索引需要注意的几点:

  • 按照索引的最左列开始查询。如果组合索引建立在第1、2、3列上,但是查询时只用到第2、3列,那么该查询仍要全表扫描,该组合索引未使用。
  • 不能跳过索引中的列进行查询。
  • 如果组合索引建立在第1、2、3列上,但是查询时只用到第1、3列,那么该查询只会利用到第1列的索引,然后对第1列索引查出来的记录进行全部扫描。
  • 如果查询时某个列使用了范围查询,则其右边的列都无法使用索引进行查询优化。

order by和group by也遵循最左前缀原则。

如,

alter table city add index city_index(vc_Name, vc_City, i_Age)

建立这样的组合索引,其实是相当于分别建立了

vc_Name,vc_City,i_Age

vc_Name,vc_City

vc_Name

例,

a37db726590debebf66338d349601077.png

下面的查询语句,打钩的表示该句用到了组合索引:

9e8d12aa16916be777ced3149da5619d.png

组合索引总结

  1. 如果select中的字段全部是组合索引的字段(不在乎顺序),那么,只要where中的字段全都是组合索引的字段(不在乎顺序、个数),那么该组合索引就会在该select中用到。
  2. 如果select中存在组合索引中没有的字段,那么,只要where中所有字段组合起来(可以是任意顺序)符合组合索引的最左前缀原则,那么该组合索引就会在该select中用到。
  3. 其他情况该组合索引不会被用到。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值