是否更快地進行數據庫訪問並帶回3000+行,然後使用LINQ或更快速地使6個調用一次帶回100行?哪一條最快?數據檢索
回答
這是一個用戶,還是許多用戶會查詢數據?單個數據庫調用在負載下可以更好地擴展。
這將完全取決於數據庫,網絡帶寬和延遲,在.NET機器的速度,實際查詢等
換句話說速度,我們不能給你一個真實的一般答案。我知道哪些聲音更容易編碼:)
不幸的是,這種類型的測試環境與生產環境有些不同,但如果沒有生產環境的複製品,您就無法進行有效測試。 ,這可能會嚴重改變結果。
那麼,答案總是「取決於」。你想優化數據庫負載還是應用程序負載?
在這種情況下,我的一般答案是在數據庫級別使用特定查詢,因此使用6個調用。
問題的一部分是您沒有提供足夠的信息來給出準確的答案。顯然,可用資源需要考慮。
如果您不經常拉3000行,它可能在短期內適合您。但是,如果說有10,000人執行相同的查詢(忽略緩存效果),則這可能會成爲應用程序和數據庫的問題。
現在,在類似分頁的情況下,只需將所需內容拉入即可。但是,這只是一個普遍的規則,試圖拉取必要的東西。使用手術刀而不是大刀更優雅。 =)
如果你正在談論一個已經由SQL運行(通過SQL Server優化)的查詢,使用LINQ或SqlDataReader實際上可能會有相同的性能。
唯一的區別是「維護代碼有多難?」
LINQ不詢問數據庫的任何內容,直到用「.ToList()」或「.ToArray()」或甚至「.Count()」詢問結果爲止。 LINQ動態構建您的查詢,因此它與具有SqlDataReader但具有運行時驗證完全相同。
我總是堅持「引進我所需要的」的規則,而且更多......我在這裏的問題是我需要它,我只是需要單獨顯示。
所以說... 我有一個表與userid和typeid。我想用一個用戶標識顯示所有記錄,並在網格中用typeid分隔的網頁上顯示。
目前我稱之爲「選擇field1,字段2從標籤where userid = 1」, ,然後在頁面上設置網格的數據源從t到tab,其中typeid = 2 select t;
而不是調用另一個sproc「select field1,field2 from userid = 1 and typeid = 2」tab 6次。
??
而不是猜測,你爲什麼不嘗試並測量結果?
速度只是其中的一個考慮因素。
你的代碼有多靈活?在需求變化時,修改和擴展有多容易?他人閱讀和維護你的代碼有多容易?你的代碼是多麼便攜?如果你改用不同的DBMS或不同的編程語言怎麼辦?在你的情況下,這些考慮都很重要嗎?
話雖如此,如果所有其他的東西都是平等的或不重要的,那就去單程往返。
您提到單次往返可能會導致您讀取不需要的數據。如果您需要的所有數據都可以在單個結果表中進行描述,那麼應該可以設計一個能夠得到該結果的查詢。如果查詢使數據非規格化,該結果表可能會在多行中提供一些結果數據。在這種情況下,您可以通過獲取多個結果表中的數據並自行編寫結果來獲得一些速度。
您還沒有提供足夠的信息來知道編寫單個查詢或編寫6個查詢返回的數據將花費多少編程工作量。
正如其他人所說,這取決於。
我這裏的問題是,我需要的一切,我只需要它單獨顯示...
的回答你的問題是1個查詢3000行是優於6個查詢500行。 (假設你將所有3000行都帶回去)
但是,你不可能一次顯示3000行,是嗎?很可能,無論使用Linq,你都希望運行聚合查詢並讓數據庫爲你完成工作。您應該希望能夠構建SQL(或Linq查詢)以一次執行所有必需的邏輯。
不知道自己在做什麼,很難更具體。如果你絕對肯定需要帶回所有行,然後調查你的linq IQueryable的ToLookup()方法。以非標準方式對結果進行分組非常方便。
噢,我強烈推薦LINQPad(免費)試用Linq的查詢。它有大量的示例,並且它還顯示了sql和lambda表單,因此您可以熟悉Linq < - > lambda表單< - > Sql。
如果您知道要預先執行哪6條SQL語句,那麼可以將它們捆綁到一個對數據庫的調用中,並使用ADO或ADO.NET返回多個結果集。
這取決於
1)如果你的連接器實現precaches大量的對象,你有大行(例如斑點,contry多邊形等),你有問題,你必須下載很多數據。我已經優化了一次有這個問題的代碼,它只是通過本地主機一直下載一些垃圾大小,現在我的軟件運行速度提高了10倍,因爲我通過一個選項刪除了預讀。
2)如果你的行很小,你很有可能需要閱讀所有的3000,你最好去一個大的結果集
3)如果你不使用預處理語句,所有的查詢都必須被解析!大的結果可能會更好。
希望它幫助
- 1. 哪個PHP函數最適合檢索Web服務器數據
- 2. 加快從數據庫檢索數據的不同方法有哪些?
- 3. 從API中檢索數據的最快方法
- 4. 最快的方式來存儲數據表和檢索
- 5. MySQL中的快速數據檢索
- 6. swift - Firebase數據庫快照檢索。
- 7. 哪一個是最快的數據採集?
- 8. 無法使用ur條款從DB2中檢索最新數據
- 9. 如何檢索最新創建的數據庫條目?
- 10. 檢索符合選定條件的數據的最佳做法
- 11. 哪一個檢查行時存在的最快方法?
- 12. 如何從維基數據檢索結果中檢索維基數據條目?
- 13. VB數組中哪個索引變化最快?
- 14. RecyclerView從最後位置檢索數據
- 15. MySQL:檢索最新插入的數據
- 16. Find,Single,First中哪一個最快?
- 17. 什麼是檢查數據庫中存在條目的最快方法?
- 18. 使用Eloquent Laravel檢索數據庫唯一條目4
- 19. 只使用一個條件檢索兩個數據ID
- 20. 從數據庫中檢索一百萬條記錄
- 21. Android - 如何檢索一個WHERE條件的數據庫行?
- 22. 哪種方法更適合從數據庫檢索數據
- 23. 使用Java更快地進行SQL數據檢索並搜索大量數據
- 24. 檢索數據
- 25. 檢索數據
- 26. 根據一組類別檢索數據
- 27. 如何從數據庫中檢索行通過月在哪裏條件
- 28. 設置全球哪裏條款當我檢索數據使用laravel雄辯
- 29. Android studio SQLite數據庫特定條目的數據檢索
- 30. 如何從數據庫檢索最後一個插入ID
這並不直接回答你的問題,但我問了一個關於鏈接的問題[「有多快的LINQ」(http://stackoverflow.com/questions/115851/how-fast-是-LINQ)。也許答案會幫助你。 – ThatBloke 2008-10-23 10:21:53