MySQL单列索引和多列索引

5 篇文章 0 订阅
3 篇文章 0 订阅

在设计MySql表索引的时候,可能有个问题,就是多个单列索引好,还是设计为多列索引好;下面从不同角度分析下这个问题;
1.多个单列索引:
定义:即是在表中在需要索引的字段上为每个字段设计一个索引;
特点:简单,索引个数多

2.多列索引:
定义:即是在表中根据查询需求在多个字段上设计一个索引;
特点:稍微复杂,需要考虑索引顺序;

3.性能上的对比

  • 多个单列索引的情况下,MySql在执行查询时,如果where条件中是使用and连接各种过滤条件的,那么MySql会选择其中一个限制最严格的索引(区分度最高的)。
  • 多列联合索引中由于索引是考虑索引字段顺序的,根据InnoDB中B-Tree的实现原理,单个索引限制再严格也没有多列限制严格,所以在多列索引的情况下数据库扫描更少的行,可以在较短的时间内返回数据;

4.判断依据 
主要使用MySql的查询计划来判断执行器在查询数据的时候到底使用哪个索引,主要的依据是根据执行计划的Extra字段,下面是Extra在不同情况下代表的使用不同类型的索引
Extra:

  • Using index:直接使用索引,覆盖索引的情况,可以通过索引直接返回所需数据。
  • Using indexc ondition:使用索引,但需要回表查询相关数据

5.覆盖索引 
定义:查询所需数据通过索引可以直接获取到,不需要回表查询数据行;

  • Select查询返回列包含在索引列中
  • where条件包含索引列或复合索引的前导列
  • 查询结果的总字段长度可以接受

6.索引合并 
在索引设计不太合理的时候,MySql可能会对一些查询执行索引合并

  • 在多个单列索引的情况下,
    • where条件的索引列使用or连接时,会触发索引合并
    • where条件的索引列使用and连接时,通常会选择限制最严格的索引,这个时候联合索引(多列索引)比较合适
  • 合并标识
    • 使用 explain 可看到 type:index_merge
  • 触发索引合并,说明当前索引设计的比较糟糕

 

https://blog.7street.top/2018/01/31/MySQL%E7%B4%A2%E5%BC%95%E8%A1%A5%E5%85%85/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值