我有三个大型MySQL表。他们接近200万条记录。其中两个表是InnoDB,目前大小约为500 MB。另一个表是MyISAM,大约是2.5 GB。
我们从FileMaker运行一个导入脚本来插入和更新这些表中的记录,但最近它变得非常慢 - 每小时只插入几百条记录。
如何提高性能以使插入和更新更快地发生?
答案 0 :(得分:2)
对于INSERT,它可能与您在表上定义的索引有关(它们必须在每次INSERT后更新)。你能发布更多关于它们的信息吗?表上是否设置了触发器?
对于更新它是一个不同的故事,可能是记录更新不是很慢,但找到记录很慢。您是否可以尝试将UPDATE更改为SELECT并查看它是否仍然很慢?如果是,那么您应该调查您的索引。
答案 1 :(得分:2)
对于Innodb表,如果它是可接受的风险,我会考虑更改innodb_flush_log_at_trx_commit级别。 this blog post中的更多细节,以及更多Innodb调整指针。
对于这两个引擎,将INSERT
一起批处理可以加快速度。见doc。
您运行的是哪个版本的MySQL?新的InnoDB“插件”引擎和具有多个处理器的服务器上的操作并发性有了很多改进。
答案 2 :(得分:2)
从命令行在MySQL上执行时查询是否很慢?
如果您正在使用FileMaker中的Execute SQL
脚本步骤,则会在每次调用后连接并断开连接,从而导致执行大量查询时出现严重减速。我们已经让客户切换到我们的JDBC plugin(此处是自我推销免责声明)以避免这种情况,从而导致重大加速。
答案 3 :(得分:0)
事实证明,缓慢的原因来自FileMaker方面。将FileMaker记录导出为CSV并运行INSERT / UPDATE命令可以非常快速地执行。