概述
SQL定位慢查询(mysql)
首先,数据库查询变慢的原因我们一定要先找到,都有哪些语句导致查询变慢,然后我们才能知道优化那些语句。
什么是慢查询呢?
mysql 默认10秒内没有响应结果,则为慢查询,默认时间可以修改的。
查询慢查询:
修改慢查询:
set long_query_time=3; 意思 查询时间超过3秒,为被视为慢查询,(但改修改方法会在mysql重启后恢复默认值)
mysql 默认情况下是不会记录慢查询的,需要启动时指定慢查询记录到log里才行修改my.cnf
修改为:
slow_query_log =1(默认为no)
slow_query_log_file=/usr/local/mysql/data/localhost-slow.log (系统默认给的日志文件)
修改后重启mysql 这样只要查询超过3秒的sql 就会被打印到log里,然后我们就可以通过explain 执行计划分析sql效率。
SQL语句优化
- 避免全表扫描 where 条件中尽量少用NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE 它们会引起全表扫描。
- 在where 子句条件中尽量避免null判断 最好用默认值0来代替null进行查询。
- 在where子句条件中尽量避免用or连接条件最好使用union all 连接。
- like 查询时避免使用前置%查询会导致索引失效全表扫描。
- where子句条件查询时可以使用between and的尽量不要用in 或者用exists 代替。
- where子句查询时不要对字段进行表达式判断如:sum/2=5,会不使用索引进行全表扫描的改成 sum=2*5。
- where子句查询时不要对字段进行函数操作如:substring(xm,1,4)=wang 会不使用索引进行全表扫描的改成 like 'xm %'。
- 查询时尽量不用select * 不要查询出没有用的字段。
- 字段可以使用数字类型,尽量不要用字符类型,还有尽量用varchar/nvarchar代替char/nchar 。
- 尽量减少子查询,使用关联查询(left join,right join,inner join)替代。
以上为个人学习总结!
别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得吊儿郎当,和你一样会抱怨,而只有你相信这些都是真的,最后也只有你一人继续不思进取!
最后
以上就是魁梧乌龟为你收集整理的sql优化 定位慢查询的全部内容,希望文章能够帮你解决sql优化 定位慢查询所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复