我有一個正在通過LINQ to SQL執行的查詢。查詢如下所示:直接SQL查詢與EXEC
exec sp_executesql N'
SELECT DISTINCT [t2].[ID],...
FROM
Table1 AS [t0]
INNER JOIN Table2 AS [t1] ON [t0].[Table1ID] = [t1].[Table1ID]
INNER JOIN Table3 AS [t2] ON [t2].[Table2ID] = [t0].[Table2ID]
WHERE
([t2].[Visible] = @p0)
AND ([t1].[AncestorID] IN (@p1,...,@p277))',N'@p0 int,...,@p277 int',@p0=1,[email protected]=2875
正如您所看到的,它基本上是一個帶有277個參數的子查詢。使用exec並傳遞參數如上,查詢需要20秒。
如果我將查詢從exec調用中拉出並「正常」運行,則需要的時間少於,而不是一秒。下面是該查詢:
DECLARE @p0 int;
...
DECLARE @p277 int;
SET @p0=1;
...
SET @p277=287;
SELECT DISTINCT [t2].[ID],...
FROM
Table1 AS [t0]
INNER JOIN Table2 AS [t1] ON [t0].[Table1ID] = [t1].[Table1ID]
INNER JOIN Table3 AS [t2] ON [t2].[Table2ID] = [t0].[Table2ID]
WHERE
([t2].[Visible] = @p0)
AND ([t1].[AncestorID] IN (@p1,...,@p277))
第三項測試,當我換一個exec裏面的第二個查詢,它工作瞬間依然。所以問題似乎是在exec調用中傳遞參數。
我猜(隱含的)問題是,「我如何讓這個運行更快?」 – JNK 2011-04-15 18:28:55
這與LINQ有什麼關係? – 2011-04-15 18:42:36
第一個查詢是LINQ-to-SQL產生的。問題是「爲什麼這些查詢在覈心上是相同的,以不同的速度運行」。 – 2011-04-15 18:52:02