sql优化 定位慢查询

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语句优化

  1. 避免全表扫描 where 条件中尽量少用NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE 它们会引起全表扫描。
  2. 在where 子句条件中尽量避免null判断 最好用默认值0来代替null进行查询。
  3. 在where子句条件中尽量避免用or连接条件最好使用union all 连接。
  4. like 查询时避免使用前置%查询会导致索引失效全表扫描。
  5. where子句条件查询时可以使用between  and的尽量不要用in 或者用exists 代替。
  6. where子句查询时不要对字段进行表达式判断如:sum/2=5,会不使用索引进行全表扫描的改成 sum=2*5。
  7. where子句查询时不要对字段进行函数操作如:substring(xm,1,4)=wang 会不使用索引进行全表扫描的改成 like 'xm %'。
  8. 查询时尽量不用select *   不要查询出没有用的字段。
  9. 字段可以使用数字类型,尽量不要用字符类型,还有尽量用varchar/nvarchar代替char/nchar 。
  10. 尽量减少子查询,使用关联查询(left join,right join,inner  join)替代。

以上为个人学习总结!

别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得吊儿郎当,和你一样会抱怨,而只有你相信这些都是真的,最后也只有你一人继续不思进取!

猜你喜欢

转载自blog.csdn.net/Ocean_999/article/details/85161231