Gre*_*reg 19 mysql indexing performance
我们有一系列有机增长到数百万行的表,在生产中进行插入或更新可能需要长达两秒钟.但是,如果我转储表并从转储查询重新创建它是快速的.
我们通过创建一个副本来重建其中一个表,重建索引然后执行重命名切换并复制任何新行,这是因为该表只被附加到.这样做可以快速插入和更新闪存.
我的问题:
为什么插入会随着时间的推移变慢?为什么重新创建表并进行导入修复?有没有办法可以重建索引而不锁定表更新?
Bre*_*ley 10
InnoDB性能严重依赖于RAM.如果索引不适合RAM,性能可能会大幅下降.重建整个表可以提高性能,因为数据和索引现在已经过优化.
如果您只是插入表中,MyISAM更适合这种情况.如果仅追加,则不会出现锁定问题,因为记录已添加到文件末尾.MyISAM还允许您使用MERGE表,这些表非常适合脱机或归档部分数据而无需进行导出和/或删除.
这听起来像是
您可以尝试analyze table foo
哪些不带锁,只需几次索引潜水并需要几秒钟.
如果这不能解决问题,您可以使用
mysql> SET PROFILING=1;
mysql> INSERT INTO foo ($testdata);
mysql> show profile for QUERY 1;
Run Code Online (Sandbox Code Playgroud)
你应该看到大部分时间花在哪里.
显然,当以PK命令完成插入时,innodb表现更好,这是你的情况吗?