簡體   English   中英

EF-Linq查詢排序的最快方法是什么?

[英]What is the fastest way to sort an EF-to-Linq query?

從理論上講,使用實體框架會更快:

// (1) sort then select/project
// in db, for entire table
var results = someQuery
              .OrderBy(q => q.FieldA)
              .Select(q => new { q.FieldA, q.FieldB })
              .ToDictionary(q => q.FieldA, q => q.FieldB);

要么

// (2) select/project then sort
// in db, on a smaller data set
var results = someQuery
              .Select(q => new { q.FieldA, q.FieldB })
              .OrderBy(q => q.FieldA)
              .ToDictionary(q => q.FieldA, q => q.FieldB);

要么

// (3) select/project then materialize then sort
// in object space
var results = someQuery
              .Select(q => new { q.FieldA, q.FieldB })
              .ToDictionary(q => q.FieldA, q => q.FieldB)
              .OrderBy(q => q.FieldA);  // -> this won't compile, but you get the question

我不是SQL專家,但直覺上似乎2比1快...是正確的嗎? 並將其與3進行比較,因為以我在EF方面的經驗,在db上完成時幾乎所有操作都更快。

PS:我的環境中沒有性能工具,也不確定如何進行測試,因此是一個問題。

調用ToDictionary ,查詢正在編譯並正在執行,因此1和2應該相同並且產生相同的查詢:在兩種情況下SELECT FieldA, FieldB FROM table ORDER BY FieldA您都會得到一個SELECT FieldA, FieldB FROM table ORDER BY FieldA

第三點不同:首先執行SQL查詢(不帶ORDER BY子句),然后對返回的內存集進行排序(數據不是由DB提供程序排序,而是由客戶端排序)。 這可能更快或更慢,具體取決於數據量,服務器和客戶端的硬件以及數據庫的設計方式(索引等),網絡基礎結構等等。

無法通過您提供的信息來判斷哪個會更快

PS:這毫無意義,因為Dictionary並不真正在乎順序(我不認為3會因為Dictionary<>而編譯,如果我沒記錯的話,它沒有OrderBy ),但是將ToDictionary更改為ToList並有你的表現答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM