2010-12-07 73 views
4

我有三个大的MySQL表。他们正在接近200万条记录。其中两个表是InnoDB,目前大小约为500 MB。另一个表是MyISAM,大约2.5 GB。如何加快MySQL的INSERT/UPDATE?

我们从FileMaker运行导入脚本以插入和更新这些表中的记录,但最近它变得非常慢 - 每小时只插入几百条记录。

我能做些什么来提高性能以使插入和更新更快地发生?

+1

需要有关'从FileMaker导入脚本以插入和更新'的更多信息。 这是一个FileMaker脚本(慢)?是否有任何未加密的FileMaker计算(缓慢)? FileMaker如何与MySQL交谈? – Ted 2010-12-10 05:22:01

+0

可能重复的[如何提高MySQL INSERT和UPDATE性能?](http://stackoverflow.com/questions/2367229/how-to-improve-mysql-insert-and-update-performance) – hakre 2013-08-23 15:16:16

回答

0

事实证明,缓慢的原因来自于FileMaker方面。将FileMaker记录导出到CSV并运行INSERT/UPDATE命令可以实现非常快的执行。

2

对于INSERT,它可能与您在表上定义的索引有关(它们必须在每个INSERT后更新)。你能发布更多关于他们的信息吗?桌子上是否有触发器?

对于更新,它是一个不同的故事,它可能是记录更新不是很慢,但找到记录很慢。你可以尝试将UPDATE更改为SELECT并查看它是否仍然很慢?如果是,那么你应该调查你的索引。

2

对于Innodb表,如果这是一个可接受的风险,我会考虑更改innodb_flush_log_at_trx_commit级别。 this blog post中的一些更多细节,以及一些更多Innodb调整指针。

对于两台发动机,分批INSERT s可以加速到一定程度。见doc

你运行的是哪个版本的MySQL?新的InnoDB“插件”引擎和多处理器服务器操作的并发性已经有了很多改进。

2

从命令行执行MySQL时查询速度是否缓慢?

如果您使用FileMaker的脚本步骤Execute SQL,那么在每次调用之后都会进行连接和断开连接,因此在执行大量查询时会造成严重的延迟。我们已经让客户切换到我们的JDBC plugin(这里是自我推销免责声明)以避免这种情况,导致重大加速。