我在我的數據庫中有一個表,其中有大約200行數據需要檢索。在一次查詢中同時檢索所有這些查詢時效率的差異,還是單獨查詢中的每一行,效果會有多大?檢索一個查詢中的所有行或單獨檢索每行的效率差異?
回答
查詢通常是通過套接字進行的,所以執行200個查詢而不是1個代表大量的開銷,再加上RDBMS被優化爲爲一個查詢獲取大量的行。
200個查詢而不是1個會使RDBMS初始化數據集,解析查詢,獲取一行,填充數據集,並將結果發送200次而不是1次。
只執行一個查詢會好得多。
一般來說,您希望最小化對數據庫的調用次數。您已經可以假定MySQL已經過優化以檢索行,但是您無法確定您的調用是否已經過優化(如果有的話)。
非常顯着,通常一次獲取所有行將花費盡可能多的時間獲取一行。所以我們假設時間是1秒(非常高但對插圖有好處),那麼獲取所有行需要1秒鐘,單獨獲取每行需要200秒(每行1秒)非常大的差異。這不包括你從哪裏得到200開頭的名單。
我認爲這種差異會很明顯,因爲在解析和執行查詢,將數據打包回送等方面會有很多開銷比一次。
通常編寫一個快速測試,其中有多種方法,然後您可以比較有意義的統計數據。
所有這一切說,你只有200行,所以在實踐中並不重要。
但是,仍然要立即將它們全部取出。
如果您在討論一些不斷查詢的問題k
與更多的常量查詢k+k1
,您可能會發現更多的查詢更好。我不確定,但是SQL有各種不尋常的怪癖,所以如果有人能夠提出這樣的場景,我不會感到驚訝。
但是,如果你正在談論一些不變的查詢數k
與一些非固定數量的查詢n
,你應該總是選擇不變的查詢數選項。
正如其他人所說的。你的關係型數據庫不會在你一次性拋出200 +++++行的汗水。獲取一個關聯數組中的所有行也不會對您的腳本產生太大影響,因爲您無疑已經有一個抓取每個單獨行的循環。
所有你需要做的就是修改這個循環通過你給出的陣列來迭代[非常小調整!]
我發現的唯一的一次更好地得到來自多個查詢,而不是一個大組較少的結果是否需要對結果進行大量處理。通過打破設置的結果,我能夠從結果集中刪除大約40,000條記錄(加上相關的處理)。任何可以構建到查詢中的任何東西都可以讓數據庫執行處理並減少結果集大小,這是一個好處,但如果您真的需要所有行,只需去獲取它們即可。
- 1. 像查詢檢索所有的行
- 2. 最有效的方法來檢索相關數據行:子查詢,或單獨的查詢與GROUP BY?
- 3. 使用php的mysql查詢不檢索表中的所有行
- 4. 在一個查詢中檢索一行中的兩個值
- 5. 如何檢索子查詢中的所有行
- 6. GridView檢索每一行中的數據
- 7. mysql_fetch_array不檢索所有行
- 8. 用於檢索打卡順序中的差異的SQL查詢
- 9. Oracle查詢 - 檢索下一行
- 10. MySQL查詢檢索缺少一行
- 11. tcpdf sql查詢只檢索一行
- 12. 無法檢索表php中的所有行,只有一半檢索
- 13. PHP檢索,而不是檢索所有錶行的同一行多次
- 14. SQL查詢從另一個表中檢索每列的所有值?
- 15. 執行多個查詢時檢索last_insert_id
- 16. 的Xcode:檢索的Xcode一行基於搜索查詢
- 17. MySQL _在單個查詢中檢索多個行和列
- 18. 創建一個查詢來檢索Mysql中的某些行
- 19. 如何檢索MAX查詢的整行?
- 20. 如何編寫一個SQL查詢,該查詢檢索每個現有唯一ID組合的一行?
- 21. C#LDAP查詢檢索組織單位中的所有用戶
- 22. 查詢SQL Server中檢索行
- 23. JSP - 從查詢中檢索行名
- 24. 檢索具有「有」條件的子查詢中的單個列
- 25. 檢索所有IDS其中`name` LIKE%current_name在一個查詢
- 26. SQL檢索單行
- 27. 檢索所有行數據庫的Grails
- 28. 檢索編號爲1的所有行
- 29. 檢索今天插入的所有行
- 30. 檢索一些具有前兩個日期差異超過120秒的SQL行
你需要他們嗎? – Gumbo 2009-07-24 17:48:31
是的,我需要他們。 – 2009-07-24 17:48:48
那你爲什麼要一個一個選擇它們? – Gumbo 2009-07-24 17:49:50