sql-server-2005 - 你能强制 Linq2SQL 不使用 sp_executesql 吗?

标签 sql-server-2005 tsql linq-to-sql

所以我写了一个 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

最佳答案

您的问题并非源于使用 sp_executesql,因此绕过它(您不能)不会解决您的问题。我建议您阅读 Erland Sommarskog 的优秀文章:

Slow in the Application, Fast in SSMS?
Understanding Performance Mysteries

这将使您深入了解为什么会出现性能差异、如何诊断和一致地重现它,以及最后如何解决它。

关于sql-server-2005 - 你能强制 Linq2SQL 不使用 sp_executesql 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8685909/

相关文章:

jquery - 先进的 ASP.NET 提高性能

sql - SQL 复杂数据透视表

sql-server - SQL地址数据乱七八糟,如何在查询中清理?

sql - 复杂分组和结果集

c# - 选择所有具有活跃项目的类别?

sql - 在 SQL 中对重复的行进行分组

sql-server-2005 - SQL Server 2005和2008在同一开发人员机器上?

asp.net-mvc - 使用 linq to sql 过滤数据库中的数据时,是先返回完整列表,然后再过滤,还是仅返回过滤后的列表?

c# - C#汇编中的SQL汇编错误

c# - 是否可以从 View 中通过 Linq-to-sql 更新记录?