• mysql优化的几个常见问题总结


    在项目中,总会遇到一堆sql慢的要死的问题,我在项目中遇到的一些问题和请教了一些老师傅,总结一下,做个备忘录

    一、首先要了解sql语句的执行过程

                   比如,select * from user where name = 'laoli' 

                   执行的顺序肯定是从from开始的

                   查询字段从表中,条件是,name=‘laoli’;

                   我们看下select * from A a left join B b on a.id = b.id where a.name = 'laoli'

                  同理,如果A有10条数据,B有5条数据,展示的条数应该是10条,执行的顺序是

                  从from开始,查询A表 left join B on下 从笛卡尔积中找到A的id 等于B的id,然后在找下where条件

    二,学会做减法

                 举个例子

                 在多表查询中,有些大表的数据特别多,我们不可能对这个大表进行全扫描;

                 我们要在大表中,根据我们的需求,先去在大表中查询到我们想要的数据,

                 如果C是个大表,我们就先在C中做减法;

    select * from A a join B b on a.id = b.id jion (select id,name from c where c.createtime between time1 and time 2) on a.id = c.id where 条件 

    三,建立索引

            1,尽量保持建立索引的那个字段的散列性,重复率不要超过10%;极端的例子,你给性别做索引,没有什么意义,只有三个,男,女,其他;

            2,经常出现在where条件上的字段,要建立索引;

           3,频繁增删改的字段,尽量不要建立索引,容易产生碎片;

           4,无效的索引一定要及时删除;

           5,字段NULL值比较多的,尽量必要建立索引;在建表初期,将null尽量赋值为别的字符;     

           6,在join 的on 后面需要的字段,根据实际情况,建立索引;

           7,表的主键和外键,必须是索引;

           8,not like %,like %开头,in not null这些,索引无效

          9,学会组合索引,ABC,三个索引,A要当排头;

          等等等,欢迎大家来补充,谢谢。

    四,学会分区,分表,分库

          分区分表分库要明白,数据的散列性分布,尽量不要造成数据倾斜;

    五,sql的优化

          1,select * from user where age/2=10 和select * from user where age=20;这两个sql,第二条的执行效率明显高于第一条;

              第一条,需要age这个字段进行全表扫描,但是第二条不会;所以,我们不要对字段进行计算;

          2,合理的使用索引;

          3,JOIN字段都根据业务需求提前加上索引

          4,尽量不要select * ;

          5,>和<号等运算符的运用,避免全表扫描

          6,将大量的OR,用成in;

              select num from a where num =1 or num =2 or num = 3 ===》select num from a where num in(1,2,3)

          7,like %字段%会导致索引失效,不如改成like 字段%

          8,在已知的区间中,尽量使用between;

         等等,优化的语句还有很多,在项目过程中,慢慢补充

                

                   

  • 相关阅读:
    Android配置----adb工具的使用
    Android配置----小米手机通过wifi连接ADB调试Android应用
    Java语法基础(二)----运算符
    Java语法基础(一)----关键字、标识符、常量、变量
    Java学习----Java概述
    nginx配置upstream实现负载均衡
    docker挂载本地目录和数据卷容器
    sublime text 3 配置优化
    sql update set使用case when语句
    mysql表复制create table like和create table as比较
  • 原文地址:https://www.cnblogs.com/invban/p/14605657.html
Copyright © 2020-2023  润新知