SQL执行频次
-
语法:
SHOW GLOBAL STATUS LIKE 'COM_+类型'; COM_insert; 插入次数 com_delete; 删除次数 com_update; 更新次数 com_select; 查询次数 com_______;
-
注意:通过语法,可以查询到数据库的实际状态,就可以知道数据库是以增删改为主,还是以查询为主,如果是以查询为主,就可以考虑sql 的索引优化。
慢查询日志(可以根据此日志看是否需要优化sql)
-
概述:慢查询日志记录了超过指定时间的查询sql,指定参数(long_query_time,单位是秒,默认值是10秒)
-
如何查看慢查询功能是否打开?
show variables like 'slow_query_log';
-
参数说明
- slow-query-log=1 代表开启 =0 代表关闭
- long_query_time=10 代表慢查询超过10秒日志会记录
- slow_query_log_file 慢查询的日志文件
-
演示慢查询
- 把慢查询打开 slow-query-log=1
- 把慢查询时间设置段 1秒 long_query_time=1
- 重启一下mysql 的服务
-
分析慢查询日志
- 当sql 出现到慢查询日志中的时候,就可以考虑对这条sql 进行优化了。
Profile 详情
-
概述:show profiles 能够用来做SQL优化时,协助我们了解时间消耗
-
查看Profile 是否开启
select @@profiling;
-
设置profile开启
set [session/global] profiling=1
-
同过profile了解时间消耗
select * from user; select count(*) from user; select * from user where id = 10; select * from user where name = '荆轲'
- 使用profiles文件观察时间消耗
- show profiles;(每次执行,query_id 都会变)
- show profile for query query_id;(注意query_id 是使用showprofiles 查询出来的)
- show profile cpu for query query_id;可以查询cpu占用
- show profiles;(每次执行,query_id 都会变)
- 使用profiles文件观察时间消耗
explain
- explain 或者 desc 都可以获取select语句的查询信息
- 语法:
explain 查询语句
-
演示 id 执行先后的
explain select * from emp where dept_id = (select id from dept where name = '研发部')
-
演示 type(const 使用主键或者唯一索引的时候)
explain select id from dept where name = '研发部'; allexplain select * from emp where id = 1;explain select * from user where phone = '13508895543'
-
key 演示
explain select * from user where id > 5
索引效率验证
-
添加主键索引(添加的时候,需要维护索引数据,所以速度较慢)
-
没有主键索引的时候耗时情况
-
添加了主键索引的时候耗时情况
-
-
给 name 字段添加索引列
-
name 没有添加索引列的时候
-
给name 添加了索引列之后
-
- 结论:索引确实能提升查询速度,而且是质的提升。