2011-09-01 36 views
1

我正在做一個MySQL的大連接,然後對結果數據進行操作並將其寫入另一個表。現在,我使用默認的mysql_store_result,但查詢後需要大約20分鐘才能運行$ sth-> execute()。我想切換到mysql_use_result,因爲我一次只處理一行。Perl DBD :: mysql'mysql_use_result'插入到另一個表時可以使用嗎?

但是,文檔的這部分困擾着我:

這個屬性強制驅動程序使用了mysql_use_result,而不是了mysql_store_result。前者速度更快,內存消耗更少,但往往阻礙其他進程。 (這就是爲什麼mysql_store_result是默認設置。)

我一次只處理一行,然後將結果存儲在數組中。每500個條目,我做一個INSERT到一個單獨的表。這可以從mysql_use_result循環中完成嗎?如果爲INSERT定義新的DB處理程序,可以嗎?

回答

1

您應該使用單獨的數據庫連接來執行插入操作。

不過,我相信你引用的警告是關於在服務器上阻止事情,而不是在你的特定客戶端上。

mysql documentation是略知一二:

如果你是做了很多處理的客戶端上的每一行,你不應該使用了mysql_use_result(),或者如果輸出發送到屏幕用戶可以在其上鍵入^ S(停止滾動)。這將綁定服務器並阻止其他線程更新從中獲取數據的任何表。

(我認爲是言過其實,並可能已被寫回當MySQL是更多的玩具SQL實現的。)

+0

最後一行只是讓我更加懷疑。我沒有寫信到同一張桌子,因爲我正在閱讀。 –

+0

你不是,但是有人嗎?無論如何,這個mysql頁面上的東西很清楚,你需要一個單獨的連接來做其他的事情。 – ysth

+0

我會繼續嘗試。我會標記你爲答案。 –

相關問題