2010-12-07 76 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(這裏是自我推銷免責聲明)以避免這種情況,導致重大加速。