2010-05-07 30 views
1

使用INSERT INTO foo ... SELECT FROM bar JOIN baz ...樣式插入語句與使用相同的SELECT語句將(bar,baz)轉儲到文件相比有什麼含義,然後通過加載文件插入foo?INSERT INTO ... SELECT ... vs轉儲/加載MySQL中的文件

在我搞亂的時候,我沒有看到太大的區別。我會假設前者會使用更多的內存,但運行的機器有8GB的內存,而且我從來沒有看到它使用過半。

是否有任何巨大(或長期)的性能影響,我沒有看到?兩者的優缺點?

編輯:這個加載過程發生在它自己的。當時沒有別的東西在查詢數據庫,所以鎖定表並不是什麼大不了的,速度也是如此。

回答

0

轉儲和加載的一個優點是它不會鎖定您正在選擇的表。如果選擇運行很長時間,這可能相當重要。

+0

雖然在我的具體情況下,加載過程中沒有查詢發生,所以表鎖定並不是什麼大問題(我編輯澄清了這一點)。 – 2010-05-07 17:23:04

0

問題是併發用戶。 INSERT-SELECT應該保持鎖定以保證複製並在複製時防止發生任何更改。在INSERT之前,文件方法可能發生更改。如果這很重要取決於你如何定義FK以及你真的在做什麼。你可能不想鎖,所以使用一個文件。