2013-02-09 22 views
3

我想知道是否可以通過在同一查詢中向數據庫發送多個語句來減少開銷。這可能嗎?在mysql的相同查詢中使用多個語句時是否減少了開銷?

目前我發送一個查詢之一,想送一批在同一時間數(所有的一切我送2K左右查詢)

他們都選擇查詢

+1

答案是「不是真的」,「是的」,「取決於」。 :)什麼樣的查詢?插? UPDATE?選擇?刪除? – 2013-02-09 00:52:06

+0

它們都是select查詢(主要編輯) – Bomaz 2013-02-09 00:54:38

+0

對於[mass] UPDATE/INSERT,更大的問題通常是*正確使用* transactions。但是,每個查詢都需要*往返*,對於延遲幾毫秒左右的網絡來說,這可能是「昂貴的」:在這種情況下,每個查詢的多條語句減少了單個往返延遲開銷。爲了說明這一點,延遲50ms,每秒只能處理20個* max *查詢。無論如何,如果存在可疑的性能問題,首先要找出*哪裏*。 – 2013-02-09 00:55:57

回答

1

我在使用Grails和MySQL時使用了批量插入,並且插入的時間減少了100倍! (我使用批處理一次處理大約50個插入)所以我可以肯定地說批量插入可以節省很多時間。

,我不知道有多少這篇文章可以幫助你,但在這裏Help with performance: SUBQUERY vs JOIN

的方式將連接表也可能是對性能的主要問題。

0

批處理SQL操作絕對可以提高整體速度。對於小型查詢,最慢的部分通常是建立數據庫連接。無論SQL查詢本身如何,這都是一個昂貴的步驟。您可以通過減少必須創建和銷燬這些數據庫連接的次數來減少此開銷。

+2

的確如此,儘管從應用程序服務器到數據庫服務器的往返時間如果兩者在地理上分開,也可能是最大的計時器。 – 2013-02-09 00:58:22

+0

數據庫連接在我的查詢之間持續存在我認爲 – Bomaz 2013-02-09 00:59:11

+0

所有這些沒有標準連接池的糟糕語言。讓我傷心。無論如何,對於這個問題,連接將(或應該)只在兩種情況下建立一次。 – 2013-02-09 01:03:52