zoukankan      html  css  js  c++  java
  • Mysql SQL优化

    SQL优化规则

    第一条:

    尽量全值匹配,也就是说尽量使用等于

    第二条:

    最佳左前缀原则

    如果是复合索引,要遵守最佳左前缀原则,指的是从最左侧列开始并且不跳过索引中的列

    如果是按顺序使用的索引列,且有最左侧的列,索引列完全有效

    如果使用了最左侧的列中间跳过第二列或其他列接着使用,一旦跳过,之后的列索引不生效,俗称部分失效

    如果没有使用最左侧的列,索引完全失效

    第三条:

    不在索引列上做任何操作

    不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描

    第四条:

    范围条件放在最后

    中间有范围查询会导致后面的索引列全部失效,但是本身是有效的

    第五条:

    尽量使用覆盖索引

    尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *

    第六条:

    尽量不使用不等于

    mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描

    当然,如果使用了覆盖索引,索引还是可以用的,如果一定要使用不等于,尽量使用覆盖索引

    第七条:

    Null/Not Null有影响

    注意null/not null对索引的可能影响

    在字段为not null的情况下,使用is null 或 is not null 会导致索引失效

    解决方式:覆盖索引

    EXPLAIN select  name,age,pos from staffs where name is not null

    在字段为null或者未定义的情况下

    Is not null 的情况会导致索引失效

    解决方式:覆盖索引

    EXPLAIN select  name,age,pos from staffs where name is not null

    第八条:

    使用like的注意事项

    like以通配符开头('%abc...')mysql索引失效会变成全表扫描的操作

    解决方式:覆盖索引

    EXPLAIN select name,age,pos from staffs where name like '%july%'

    第九条:

    字符串类型加引号

    字符串不加单引号索引失效

    解决方式:请加引号【捂脸】

    第十条:

    OR改 UNION效率高

    这个SQL还是贴出来吧,不然难理解

    EXPLAIN

    select * from staffs where name='July' or name = 'z3'

    EXPLAIN

    select * from staffs where name='July'

    UNION

    select * from staffs where  name = 'z3'

    解决方式:覆盖索引

    EXPLAIN

    select name,age from staffs where name='July' or name = 'z3'

    总共十条,居然还有人写成了诗,墙都不扶,就服你

    全值匹配我最爱,最左前缀要遵守

    带头大哥不能死,中间兄弟不能断

    索引列上少计算,范围之后全失效

    LIKE百分写最右,覆盖索引不写*

    不等空值还有OR,,索引影响要注意

    字符引号不能丢,SQL优化有诀窍

    听着还挺带劲

    最后附上习题一部,不发答案,大家自己瞅瞅,可以答案写评论区,我是全猜对了,你呢

    作者:彼岸舞

    时间:2020711

    内容关于:Mysql

    本文来源于网络,只做技术分享,一概不负任何责任

  • 相关阅读:
    前端笔记之JavaScript(六)让人头疼的正则表达式
    前端笔记之JavaScript(五)关于数组和字符串那点事
    前端笔记之JavaScript(四)关于函数、作用域、闭包那点事
    前端笔记之JavaScript(三)关于条件判断语句、循环语句那点事
    前端笔记之JavaScript(二)关于运算符&初识条件判断语句
    前端笔记之CSS(下)浮动&BFC&定位&Hack
    前端笔记之CSS(上)语法&文本属性&块/行内元素&选择器&盒模型
    artTemplate--使用artTemplate时,由于json对象属性有数字命名格式 导致调用报错 syntax error
    多线程--做单元测试时,使用线程池发现并没有运行指定代码,直接跳过
    JSP-导入taglib 出现classNotFound异常
  • 原文地址:https://www.cnblogs.com/flower-dance/p/13286017.html
Copyright © 2011-2022 走看看