2009-07-24 42 views
1

我在我的數據庫中有一個表,其中有大約200行數據需要檢索。在一次查詢中同時檢索所有這些查詢時效率的差異,還是單獨查詢中的每一行,效果會有多大?檢索一個查詢中的所有行或單獨檢索每行的效率差異?

+0

你需要他們嗎? – Gumbo 2009-07-24 17:48:31

+0

是的,我需要他們。 – 2009-07-24 17:48:48

+0

那你爲什麼要一個一個選擇它們? – Gumbo 2009-07-24 17:49:50

回答

6

查詢通常是通過套接字進行的,所以執行200個查詢而不是1個代表大量的開銷,再加上RDBMS被優化爲爲一個查詢獲取大量的行。

200個查詢而不是1個會使RDBMS初始化數據集,解析查詢,獲取一行,填充數據集,並將結果發送200次而不是1次。

只執行一個查詢會好得多。

0

一般來說,您希望最小化對數據庫的調用次數。您已經可以假定MySQL已經過優化以檢索行,但是您無法確定您的調用是否已經過優化(如果有的話)。

0

非常顯着,通常一次獲取所有行將花費盡可能多的時間獲取一行。所以我們假設時間是1秒(非常高但對插圖有好處),那麼獲取所有行需要1秒鐘,單獨獲取每行需要200秒(每行1秒)非常大的差異。這不包括你從哪裏得到200開頭的名單。

1

我認爲這種差異會很明顯,因爲在解析和執行查詢,將數據打包回送等方面會有很多開銷比一次。

通常編寫一個快速測試,其中有多種方法,然後您可以比較有意義的統計數據。

0

所有這一切說,你只有200行,所以在實踐中並不重要。

但是,仍然要立即將它們全部取出。

1

如果您在討論一些不斷查詢的問題k與更多的常量查詢k+k1,您可能會發現更多的查詢更好。我不確定,但是SQL有各種不尋常的怪癖,所以如果有人能夠提出這樣的場景,我不會感到驚訝。

但是,如果你正在談論一些不變的查詢數k與一些非固定數量的查詢n,你應該總是選擇不變的查詢數選項。

0

正如其他人所說的。你的關係型數據庫不會在你一次性拋出200 +++++行的汗水。獲取一個關聯數組中的所有行也不會對您的腳本產生太大影響,因爲您無疑已經有一個抓取每個單獨行的循環。

所有你需要做的就是修改這個循環通過你給出的陣列來迭代[非常小調整!]

0

我發現的唯一的一次更好地得到來自多個查詢,而不是一個大組較少的結果是否需要對結果進行大量處理。通過打破設置的結果,我能夠從結果集中刪除大約40,000條記錄(加上相關的處理)。任何可以構建到查詢中的任何東西都可以讓數據庫執行處理並減少結果集大小,這是一個好處,但如果您真的需要所有行,只需去獲取它們即可。

相關問題