定义
慢查询:超过 long_query_time 参数设定的时间阈值(默认10s)的查询。
慢查询被记录在慢查询日志里(默认不开启)。
开启慢查询
先查询是否已开启慢查询日志
show variables like '%slow_query_log%';
开启慢查询的命令:
set global slow_query_log='ON';
指定记录慢查询日志SQL执行时间的阈值
set global long_query_time=1;
查询 慢查询日志文件存放位置
show variables like '%slow_query_log_file%';
Explain分析慢查询SQL
利用explain关键字可以模拟优化器执行SQL查询语句,来分析sql慢查询语句
对于系统中需要分页的操作通常会使用limit加上偏移量
当偏移量过大时,效率过低的问题
解决:
构造索引覆盖(查询字段较少的情况)
优化OFFSET,先查询出第1000001条数据的id值,再往后查10行;适用于主键id自增的场景。
延迟关联:先只查询id列,利用覆盖索引快速查到该页的10条数据id,然后再把返回的10条id拿到表中通过主键索引二次查询。(表数据增速快的情况对该方法影响较小。)