Cod*_*ick 2 t-sql sql-server-2005 linq-to-sql
所以我写了一个Linq查询,运行需要16秒.决定查看查询计划是什么,所以我从Linq到SQL Profiler得到了它,并且查询只需要2秒就可以运行. 叹
在花了大量时间进行操作并最终使用SQL Server Profiler后,我发现Linq2SQL正在使用sp_executesql来运行查询.我知道它应该提高性能,因为它更有可能重新使用执行计划......但它似乎选择了一个可怕的执行计划来使用.
更奇怪的是,如果我加入一个特定的表,它只会变慢,我不知道为什么这个特定的表引起了问题.
编辑只是为了澄清这里的实际问题:
它实际上是在进行不同的查询.一个是,基本上,
SELECT col1, col2, ... FROM table1, table2 WHERE table1.val IN (1234, 2343, 2435)
Run Code Online (Sandbox Code Playgroud)
另一个是
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
Run Code Online (Sandbox Code Playgroud)
您的问题不是源于使用sp_executesql,因此绕过它(您不能)将无法解决您的问题.我建议你阅读Erland Sommarskog的优秀文章:
这将使您深入了解为什么您会获得性能差异,如何诊断和一致地重现它,最后,如何解决它.
| 归档时间: |
|
| 查看次数: |
1178 次 |
| 最近记录: |