當我想接下來的LINQ查詢,它是緩慢的(1.5秒):LINQ的慢而快的SQL
var rslt = (from t in context.Set<SUB_Transactions>()
where
t.UpdateDate > query.LastUpdate &&
t.TransactionID > query.Index
select new
{
TransactionID = t.TransactionID
}).OrderBy(t => t.TransactionID).Take(query.Amount).ToList();
當轉換爲SQL,這個查詢是超級快(40毫秒):
SELECT TOP (300)
[Project1].[TransactionID] AS [TransactionID]
FROM (SELECT
[Extent1].[TransactionID] AS [TransactionID]
FROM [dbo].[SUB_Transactions] AS [Extent1]
WHERE ([Extent1].[UpdateDate] > @p__linq__0) AND ([Extent1].[TransactionID] > @p__linq__1)
) AS [Project1]
ORDER BY [Project1].[TransactionID] ASC
這是怎麼回事?
除去第一查詢Take
給出了一個快速的結果,以及(給出的快,有沒有新的交易)
上有TransactionID
和UpdateDate
一個綜合指數。
問題編輯。我只是做一個.ToList()。 – Wouter
僅從查詢優化的角度來看,您應該在日期之前首先搜索ID(假設結果在較小的結果集中)。日期不平等搜索相對耗時。如果LINQ語句很耗時,可能是因爲除了查詢轉換之外,它還會調用導航屬性,並且包含在後續文章中 – DiskJunky
您是否可以將選擇部分轉換爲'select t.TransactionID',以便您不創建匿名對象爲單個屬性?一旦收到數據,這會使轉換速度更快 –