标签:sql执行时间 profiling 主键 等于 str 索引 其它 时间 code
触发器导致慢查询我把整张表dump出来,准备在自己删的差不多时候,再导回来。无意间打开导出的sql,发现该表上有一个删除行之后执行的触发器。
然后我就把触发器删除了,发现执行删除sql就很快,而且全表扫描也很快,但是触发器存在的情况下就极慢。
为啥呢???
我想看看我这条语句到底执行多久,于是我打开了profile功能。
通过set profiling=1
set session profiling_history_size = 100;
我这个sql一次删除31行
然后执行时间是2.28秒
show profiles
发现每个触发器平均执行0.07秒
0.07乘31等于2.17秒
这样的话,sql语句执行就是0.11秒
然后我又试了删除4行
发现总的执行时间是0.36秒,如果按触发器每条0.07秒,4条就是0.28秒,
那么sql的执行时间就是0.08秒。
基本上验证了一个猜测,执行的sql如果触发了触发器,那么执行的总时间就是sql执行时间+触发器执行时间。
如果更改的行数少,比如我这个4条,时间还能接受,如果更改大部分行,那么时间相当可怕,因为变更了多少行,触发器就执行多少次,时间累加。
标签:sql执行时间 profiling 主键 等于 str 索引 其它 时间 code
原文地址:http://blog.51cto.com/8370646/2150164