【发布时间】:2011-12-31 02:34:09
【问题描述】:
所以我写了一个 Linq 查询,它需要 16 秒才能运行。决定查看查询计划是什么,所以我从 Linq to SQL Profiler 中得到它,查询只需要 2 秒即可运行。 叹息
在花了一天的大部分时间研究事情并最终开始使用 SQL Server Profiler 之后,我发现 Linq2SQL 正在使用 sp_executesql 来运行查询。我知道它应该提高性能,因为它更有可能重用执行计划......但它似乎选择了一个可怕的执行计划来使用。
奇怪的是,只有加入特定表时它才会变慢,而且我不知道为什么该特定表会导致问题。
编辑只是为了澄清这里的实际问题:
它实际上涉及不同的查询。一种是,本质上,
SELECT col1, col2, ... FROM table1, table2 WHERE table1.val IN (1234, 2343, 2435)
另一个是
EXEC sp_executesql 'SELECT col1, col2, ... FROM table1, table2 WHERE table1.val IN (@p1, @p2, @p3)',
N'@p0 int,@p1 int,@p2 int,@p3 int',
@p0=1234, @p1=2343, @p3=2435
【问题讨论】:
-
那你为什么要使用 LINQ? LINQ 非常适合基础知识。如果您需要调整查询,请查询 SQL。 .NET 可以直接与 SQL 对话。
-
但我不需要调整查询...查询本身可以正常工作。
-
确保你加入的表有正确的索引,并且主要在你加入的列上。
-
您的统计数据是最新的吗?
标签: sql-server-2005 tsql linq-to-sql