MySQL优化专题(侧重开发)P46-P52
P46 小表驱动大表
永远小表驱动大表(连接成本高)
注:两表ID字段应建立索引
P47 in和exists
P48 为排序使用索引order by优化
order by子句,尽量使用using index方式排序,避免使用using filesort方式排序
重点:避免filesort!
如果order by 的字段一个是正序一个是倒序的话,就还是使用filesort,因为默认索引建的都是正序,即字段顺序相同,必须“同升同降”;
4.1版本之前是双路排序,要读两次磁盘,4.1之后改进成为单路排序:
从磁盘中读取查询所需要的所有列,在buffer中按照order by列进行排序,然后扫描排序后的列表进行输出,把随机IO变成顺序IO,但是也占用更多内存;
总体而言单路要优于双路,但是如果取的数据要高于sort_buffer_size的话,就要取好几次直至取完,这样就会产生多次IO,效果会更差;
因此需要增大sort_buffer_size和max_length_for_sort_data这两个参数的设置
P49 慢查询日志
set global slow_query_log=1是临时开启,永久开启需要改配置文件
set global long_query_time=2;
需要重新连接或者新开一个会话才能看到新设置的值;
分析工具mysqldumpslow
当然作为DBA一般我们都用pt工具
P50 批量插入数据脚本
注:以$$为结束之后还需要改回以;为结束,即DELIMITER;
P51 用show profile进行SQL分析
查看当前版本是否支持
遇到的话就必须要优化了
P52 全局查询日志
绝不可能生产环境使用,只能测试环境使用
所有sql都记录到mysql.general_log表中
作者:Asatinho
原文链接:https://www.jianshu.com/p/425876bf638f