Mysql索引优化2

理想的索引

  • 查询频繁
  • 区分度高
  • 长度小
  • 尽量能覆盖常用查询字段

索引与排序

  • 对于覆盖索引,直接在索引上查询时,就是有顺序的,using index
    • 在innodb引擎中,沿着索引字段排序自然是有序的
    • 在myisam引擎中,沿着索引字段排序,但取出来的字段有非索引字段,并不是索引->回行,索引->回行,而是一次性取出所有数据,再进行排序,explain这样的sql语句时,extra中就会出现using filesort
    • 要想办法避免filesort,尽可能的利用索引来排序
    • where a > 3 order by b 假设a列和b列都是独立索引,这样的sql explain中也会有using filesort, 因为a,b都是独立索引,在查询中只能用到a对应的索引,order by b时无法使用索引

Explain解释

  • select type字段 
    • simple (不含子查询)
    • primary(含有子查询或派生查询)
      • subquery (非from子查询)
      • derived (from型子查询)
      • union
      • union result
  • type字段 分析查询的关键字段
    • all < index < range < ref < eq_ref < (const, system, null)
    • all 全表扫描
    • index 扫描索引树上全部的索引节点
    • range 根据索引做范围的扫描
    • ref 通过索引列,直接引用到某些数据行
    • eq_ref 通过索引列,直接引用一行数据,常用于连接中
    • 一般按照主键查询时,易出现const, system 当查询不经过表时会出现null
  • table字段
    • 真实的表名
    • 临时表 如as tmp
    • derived 如from型子查询
    • null 不使用表
  • ref字段
    • 连接查询时,表之间字段的引用关系
  • possible key字段
    • 可能使用的索引
  • key 字段
    • 最终使用的索引
  • key len 字段
    • 实际使用索引的长度
  • rows 字段
    • 估计要扫描多少行
  • extra 字段
    • using index 用到了索引覆盖
    • using where 光靠索引定位不了,还得where判断一下
    • using temporary 用到了临时表,效果已经非常不好了
    • using filesort 文件排序,可能在磁盘,也可能在内存中

转载于:https://www.cnblogs.com/wjf0/p/8593925.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值