sql语句优化


SQL语句优化:
通过慢查询日志发现有效率问题的sql.
可以通过开启慢查询日志的方式进行定位有问题的sql.
1. 查看mysql是否开启慢查询日志
show variables like 'slow_query_log';
show variables like 'slow_query_log';
show variables like 'slow_query_log';
2.设置没有索引的记录到慢查询日志
set global log_queries_not_using_indexes=on;
set global log_queries_not_using_indexes=on;
set global log_queries_not_using_indexes=on;
3.查看超过多长时间的sql进行记录到慢查询日志
show variables like 'long_query_time';
show variables like 'long_query_time';
show variables like 'long_query_time';
4.开启慢查询日志
set global slow_query_log=on;
set global slow_query_log=on;
set global slow_query_log=on;
5.设置超时时间
set global long_query_time=5;超过5秒的语句才记录日志
set global long_query_time=5;
set global long_query_time=5;
6.查看慢查询日志的位置
show variables like ='slow%';
show variables like ='slow%';
show variables like ='slow%';

查看: show variables
设置: set global

慢查询日志内容分析:
主要有五部分:
- 慢查询的时间
- 慢查询的来源主机和用户
- 查询的执行时间、锁定时间、发送的行数、扫描的行数
- 时间戳形式记录的命令
- 该命令的执行时间戳

系统运行一段时间后,慢查询日志可能比较多,可以通过其他一些工具来分析。

对sql语句优化:
- 能分开写的语句就分开写,不要一次性就解决,这样对效率来说是很大的开销的。
- 避免使用不兼容的数据类型,如float和int,char和varchar.
- 尽量避免在where字句中对字段进行函数或表达式操作。
- 避免使用is not null、in等一些无法让系统使用索引操作的词。
- 合理使用exists,not exists字句。