我最近向各种 mysql 表添加了很多触发器,以强制所有内容保持完整性。我担心我可能已经杀死了我的引擎,因为现在简单的更新需要很长时间。
考虑:
UPDATE `partner_stats` SET earnings=1 WHERE date=CURRENT_DATE()
0 rows affected. ( Query took 0.6523 sec ) 
SELECT * FROM  `partner_stats` WHERE date = CURRENT_DATE() 
1 total, Query took 0.0004 sec
需要 0.0004但SELECT简单UPDATE需要 0.65!
这个特定的表只有一行并且没有与之关联的触发器。将引擎切换到 MyISAM 可以解决问题,但我将来需要为此表添加触发器,所以我想坚持使用 InnoDB。
我的引擎出了什么问题?与其他表一起工作是否太忙了?我有哪些分析或调试选项?
编辑:做了一个分析,它显示了这个:
mysql> show profile for QUERY 2;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000064 |
| checking permissions | 0.000008 |
| Opening tables       | 0.000032 |
| System lock          | 0.000007 |
| init                 | 0.000051 |
| Updating             | 0.000069 |
| end                  | 0.011682 |
| query end            | 0.218070 |
| closing tables       | 0.000016 |
| freeing items        | 0.000017 |
| logging slow query   | 0.000003 |
| cleaning up          | 0.000002 |
+----------------------+----------+
12 rows in set (0.00 sec)