Mysql-性能调优

一. 基础调优(从Sql语句角度)

  1. 单条记录查询最后添加 limit 1, 避免全表查询;

  2. 针对sql执行过长的语句进行explain解析, 再做相应调优;

  3. where子句尽量避免:

    - 表达式;

    - 对null值判断,建议对null值设置默认值0;

    - 函数操作;

    - 使用!=或<>操作符;

    - 在 = 左边进行函数,算数运算或其他表达式运算;

    - ......

  4. or 前后两个列字段都是索引时,查询才会走索引,

  5. 尽量使用in运行符来替代or运算,对于连续的数值可以用between...and...替代in;

select num from table_a a where exists(select 1 from table_b where num=a.num);

  6. 无重复记录的结果集使用union all合并;

  7. 模糊查询like的优化查询, 替代 like '%a%

- LOCATE(substr,str,pos)方法: 返回substr在str中第一次出现的位置.
  如果substr在str中不存在, 返回值为0;
  如果pos存在,返回substr在st 第pos个位置后第一次出现的位置,
  示例:
   select * from table_a where LOCATE(substr,str)>0
   select * from table_a where LOCATE(substr,str,pos)>0

- POSITION(substr IN field)方法: position可以看做是locate的别名,功能跟locate一样.
  substr是要搜索的内容,field为被匹配的字段,查询出所有filed中存在substr的数据.
  示例:   
  select * from table_a where POSITION(substr IN field))

  8. 避免select * from table_a, 而使用select 字段 from table_a;

  9. 避免向客户端返回大量数据, 若数据量过大, 应考虑是否合理.

 

二. 进一步调优(从数据库设计,数据库表设计角度)

  1. 添加索引

    - 针对以读为主要业务且数据量较大的表

      原因: 1) 添加索引能在某些场景下提高查询效率,但索引需要维护,一定程度上会使DML操作变慢;

        2) 索引会占用磁盘额外存储空间.

    - 对where及order by 涉及的字段上添加索引,一个表索引最好不要6个;

  2. 设计表时, 在满足业务的前提下, 表中字段宽度尽可能的小;

  3. 在可能情况下, 尽量将字段设置为 not null, 避免将来执行查询对null值判断;

  4. ...

    

上一篇:SpringBoot Maven打包包含时间戳和svn版本号


下一篇:【无标题】