2011-04-16 89 views
0

下面的查询需要1-10秒中插入单行Innodb的插入优化

INSERT INTO site_stats (stats_id, page_id, stats_time) VALUES(N, N, NOW()); 

stats_id和PAGE_ID是INT

的MySQL慢日志

Count   : 80049 (26%) 
Time   : 184467445311844 s total, 2304431602 s avg, 1 s to 18446744073709 s max 
95% of Time : 337702 s total, 4 s avg, 1 s to 78 s max 
Lock Time  : 4145198 s total, 51 s avg, 0 s to 8377 s max 
Rows sent  : 0 avg, 0 to 0 max 
Rows examined : 0 avg, 0 to 0 max 

忘了提:我将此表中的记录每小时移动到另一个表格以向用户提供统计信息。通常超过7000行插入在一小时内

+0

此表上有多少个索引?是否有任何其他工作在后台运行? – 2011-04-16 21:48:14

+0

是否有任何触发器因插入而触发? – Johan 2011-04-16 22:58:31

+0

@Jimmy:只有一个外键的page_id,并且这个表在后台在每小时发生的删除操作中连续命中。 @约翰:不,没有触发器。 – Maximus 2011-04-17 00:08:11

回答

0

尝试一些我在这里表现出这家伙的方法:

CodeIgniter - ses_destroy() uses a LOT of CPU

此外,删除你的一些不太重要的指标。拥有多个索引可能会减慢写入语句的速度。

+0

page_id上​​只有一个外键。我应该删除它吗? – Maximus 2011-04-16 20:35:07

+0

这张桌子有多大?尝试优化并运行MySQL调谐器。 – 2011-04-16 20:36:32

+0

它并不大。我在这个问题中增加了额外的信息。谢谢 – Maximus 2011-04-16 21:43:36