有你,世界才更有趣!

MySQL语句优化补充(一)

前面已经写了一些关于优化sql语句的方法。为了更形象的在项目中使用,以现有的数据再次详细说明一些,希望对sql优化有更进一步的学习。

从发现问题到解决问题

以本地数据 my_order表 为例,先生成119w多条记录。

《MySQL语句优化补充(一)》

根据id查询一条数据,用时0.00s

《MySQL语句优化补充(一)》

用 explain 查看详情,用到了主键索引 primary key ;查询的行数row=1;

《MySQL语句优化补充(一)》

同理,若用oid 查询一条数据,用时0.26s

《MySQL语句优化补充(一)》

explain 查看一下,没用任何索引,查询的行数row=1186791

《MySQL语句优化补充(一)》

对比两条语句,差别在于where字句后的字段是否使用了索引,初步判断是因为索引的问题。先不说索引的问题。

先开启慢查询

show variables like "slow%";

set global slow_query_log=on;
《MySQL语句优化补充(一)》

设置慢查询时间,为了更好的测试设置为0.1s,在实际项目中根据需求设置,比如设为0.5s等。

show variables like "%long%";
《MySQL语句优化补充(一)》
set long_query_time=0.1;
《MySQL语句优化补充(一)》

再次运行 select * from my_order where oid=’o_201904060514268977′;

打开慢日志文件,可查看刚才运行的语句。

《MySQL语句优化补充(一)》

查看性能

show variables like "%profiling%";
《MySQL语句优化补充(一)》
set profiling=on;
《MySQL语句优化补充(一)》

再次运行 select * from my_order where oid=’o_201904060514268977′;

show profiles;
//查看刚才运行的语句。
《MySQL语句优化补充(一)》

可以看到刚才语句语句运行的更具体的时间。再进一步分析:

show profile for query 2;
《MySQL语句优化补充(一)》

通过上图可以看到详细的运行时间。其中,Sending data花费时间最长。

并且,注意:logging slow query 也花费时间,一般不要在线上开启慢查询,等需要分析的时候再启用。

加索引优化

《MySQL语句优化补充(一)》

增加索引,alter table my_order add index(oid);

并运行:select * from my_order where oid=’o_201904060514268977′;

《MySQL语句优化补充(一)》

再分析一下:

《MySQL语句优化补充(一)》

看来加索引解决了刚才慢查询的问题。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注