β

一次sql调优

涂0实验室 104 阅读

想知道我的Java应用程序在运行时到底执行了那些SQL,以及这些SQL运行时耗费多少时间。起初试图通过mysql的日志来查看,调查了一下发现很麻烦,于是就是用mysql的jdbc驱动程序提供的功能来查看,很方便。开启的方法很简单,就是在jdbc url上加上如下的参数:

jdbc:mysql://localhost/mydb?profileSQL=true

还有很多其它很有用的参数,如:

includeInnodbStatusInDeadlockExceptions=true

可以在发生innodb死锁时打印innodb status.详细情况看最新的mysql J connector 文档。

打开日志后,发现一般的sql语句的执行时间都< 1ms, 但是有一条sql的执行时间是180ms以上。这条sql是

select max(oid) from inventory_entry where sku = ?  group by lot ;

这条sql是要查出相同sku记录按lot分组后最新的一条记录的主键。经查,因为lot在新业务模式下将不再被使用,所以可以把group by 去掉了,去掉之后执行时间降到100ms左右。select max(0id) 的作用是为了取得最新的记录,但是可以通过主键排序直接拿到的oid,因为oid是自增长的。改成:

select oid from inventory_entry where sku = ? order by oid desc limit 1;

后,时间降到1ms左右了,达到了性能要求。

相关文章:

  1. SQL select语句执行顺序
  2. mysql用sum()等函数后始终返回一行
  3. Mysql下生成序列的方法
  4. Console的写操作在windows和linux下的性能差异
  5. 可恶的乱码问题

YARPP
作者:涂0实验室
在我的小实验室里捣鼓程序,捣鼓人生
原文地址:一次sql调优, 感谢原作者分享。

发表评论