Effective MySQL之SQL语句最优化——读书笔记之一

时间:2022-04-18 04:18:41

第一章,DBA5分钟速成

本章知识点如下:

  • 寻找运行慢SQL的语句:
    • show full processlist查看所有正在执行的进程及执行的语句耗时;
    • 命令后面\G可以让命令按行显示(默认是按列)。
    • 手动用ad hoc方式执行该sql,大于10ms的查询通常会有问题(有可能是索引问题,也可能是结果集太大使得结果无意义)。
    • 对于低效的Delete和Update语句,可以通过将其改为Select大概判断其效率。
    • 生成执行计划QEP(query excution plan),注意QEP结果不一定是真正的执行结果,如row返回的行数可能是预估数字。
  • 优化查询:
    • 可以添加索引,单不是唯一或最好的方法。添加索引不可以直接再生产环境上进行,因为一个DDL可能执行数日,ALTER语句是阻塞性的;同时索引会带来额外开销。
    • 优化过后需要做验证,QEP及执行ad hoc进行验证。
    • 正确方案:验证表结构(show create table TABLENAME),查看表数据量(show table status like ‘TABLENAME’),从业务角度确认添加索引带来的影响和开销。
    • 备选方案:使用现有索引,在where字句中显示加入索引列条件,使用现用索引。