当前位置:首页
> .html
导读:P46 小表驱动大表
SQL优化过程
总结
永远小表驱动大表(连接成本高)
in
exists
注:两表ID字段应建立索引
P47 in和exists
关联子查询
in和exist...
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表中
发表评论: