阅读 60

MySQL优化专题(侧重开发)P46-P52

P46 小表驱动大表

SQL优化过程

总结

永远小表驱动大表(连接成本高)
in

exists

注:两表ID字段应建立索引

P47 in和exists

关联子查询

in和exists

P48 为排序使用索引order by优化
order by子句,尽量使用using index方式排序,避免使用using filesort方式排序
重点:避免filesort!

index排序

如果order by 的字段一个是正序一个是倒序的话,就还是使用filesort,因为默认索引建的都是正序,即字段顺序相同,必须“同升同降”;
4.1版本之前是双路排序,要读两次磁盘,4.1之后改进成为单路排序:
从磁盘中读取查询所需要的所有列,在buffer中按照order by列进行排序,然后扫描排序后的列表进行输出,把随机IO变成顺序IO,但是也占用更多内存;
总体而言单路要优于双路,但是如果取的数据要高于sort_buffer_size的话,就要取好几次直至取完,这样就会产生多次IO,效果会更差;
因此需要增大sort_buffer_size和max_length_for_sort_data这两个参数的设置
提高order by的速度

总结

group by

P49 慢查询日志

慢查询日志

开启

set global slow_query_log=1是临时开启,永久开启需要改配置文件
改配置文件

慢查询阀值

set global long_query_time=2;
需要重新连接或者新开一个会话才能看到新设置的值;
分析工具mysqldumpslow
参数

常用

当然作为DBA一般我们都用pt工具

P50 批量插入数据脚本

创建函数报错

创建函数,得到随机字符串

创建函数,得到随机数

创建插emp表的存储过程

创建插dept表的存储过程

注:以$$为结束之后还需要改回以;为结束,即DELIMITER;
插10条,从100开始

P51 用show profile进行SQL分析

show profile

查看当前版本是否支持
命令

命令

查看SQL生命周期

所有参数

一些不希望看见的过程

遇到的话就必须要优化了

P52 全局查询日志
绝不可能生产环境使用,只能测试环境使用

配置文件

命令启用

所有sql都记录到mysql.general_log表中

作者:Asatinho

原文链接:https://www.jianshu.com/p/425876bf638f

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐