mysql索引

mysql索引详细

一 执行计划

explain

1.字段解释
    a.Id(重要)
        id相同:执行顺序由上至下
        id不同:id值越大优先级越高,越先被执行
2.Type
    当我们发现执行SQL的type是range,index,all就需要对SQL进行优化
3.key_len
    当索引长度越大越好 使用索引字段越多
4.Rows
    扫描行数越少越好
5.Extra(重要)
    a.Using filesort
        意味着order by后面的字段 没有建立索引 使用了手工排序 要你命三千
    b.Using temporary
        当sql中使用了group by 如果后面的字段没有创建索引 就会出现Using temporary,Using filesort 要你命三万
    c.using join buffer
        要你命三千

二 索引优化案例

1.创建函数和大表
2.把表里面的非主键索引进行删除
3.索引的使用原则(单表)
    a.全值匹配我最爱
    b.最佳左前缀法则
        带头大哥不能死 中间兄弟不能断
    c.索引失效的情况有哪些
        索引列不要做任何操作
          使用了不等于
           使用了IS NOT NULL
            like通配符以%开头
            类型转换
             如果使用的是范围查询丢失一部分索引
              如果有范围查询 最好把范围字段放到最后
4.一般性建议
    a.对于单键索引,尽量选择针对当前query过滤性更好的索引(身份证号,手机号)
    b.在选择组合索引的时候,当前Query中过滤性最好的字段在索引字段顺序中,位置越靠前越好。这样过滤后面数据就会更少
    c.在选择组合索引的时候,尽量选择可以能够包含当前query中的where字句中更多字段的索引----全值匹配我最爱
    d.在选择组合索引的时候,如果某个字段可能出现范围查询时,尽量把这个字段放在索引次序的最后面
    e.书写sql语句时,尽量避免造成索引失效的情况
5.关联表查询优化
    a.当我们使用left join的时候
        驱动表(left join左边的表) 是没有办法避免全表扫描
        被驱动表是可以的(相应字段创建索引)
    b.当我们使用inner join的时候
        mysql会帮你找到有索引的表作为被驱动表
6.总结
    a、保证被驱动表的join字段已经被索引
    b、left join 时,选择小表作为驱动表,大表作为被驱动表。
    3、inner join 时,mysql会自己帮你把小结果集的表选为驱动表。
    4、子查询尽量不要放在被驱动表,有可能使用不到索引。
    5、能够直接多表关联的尽量直接关联,不用子查询。
7.排序优化
    a.无过滤不索引
    b.顺序错,必排序
    c.方向反必排序
8.分组优化
    b.顺序错,必排序
    c.方向反必排序
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值