目录
优化方式
sql语句优化
- 尽量避免使用子查询而使用连接查询
- 缩小查找范围,读取适当的记录LIMIT M,N,而不要读多余的记录
- 优化group by,如果对group by语句的结果没有排序要求,要在语句后面加 order by null(group 默认会排序)
- 尽量让group by过程用上表的索引
- ......
索引优化
- 尽量避免索引失效(Q27)
- 尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致))
- SQL 执行计划 explain 中的 type:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts 最好
explain分析执行计划
主要关注两个参数:
- select_type: SIMPLE>PRIMARY>SUBQUERY>DERIVED>UNION>UNION RESULT
- type: NULL>system>const>eq_ref>ref>range>index>ALL
show profile分析SQL
能够在做SQL优化时帮助我们了解时间都耗费在什么地方
trace分析优化器执行计划
MySQL5.6提供对SQL的追踪trace,通过trace文件能够进行近一步了解优化器执行的计划,以及sql解析的语句
通过慢查询日志定位那些执行效率低的SQL语句
MySQL大分页查询问题
- 通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据;
- 设置唯一自增id,where id 取当页的最后一个id作为下一个页的起始条件
- 采用 ElasticSearch 作为搜索引擎(倒排索引)