3

我正在对一个相当大的表运行此查询(我猜,大约 150-200 000 行):

select count(Distinct(eti.Email)) FROM table1 eti 
LEFT OUTER JOIN table2 ti on ti.Email = eti.Email and ti.SiteId = eti.Site_Id 
WHERE eti.Site_Id=1

在 SMMS(SQL Server Management Studio)中,执行时间不到 1 秒,但是当我尝试从我的 ASP.NET 站点执行时,它会超时。

我正在使用 PetaPoco 来获取“幕后”执行此代码的数据:

using (var cmd = CreateCommand(_sharedConnection, sql, args))
{
    object val = cmd.ExecuteScalar();
    OnExecutedCommand(cmd);
    return (T)Convert.ChangeType(val, typeof(T));
}

我一直在读到 SSMS 在执行查询时有一些“特殊设置”?我真的需要启动并运行它。

连接中的“MARS”设置是否对此有任何影响?如何调试和发现问题?

谢谢!

4

1 回答 1

0

感谢您的帮助!

我终于找到了问题(这有点尴尬)......我发现这个来自 msdn 论坛的关于 sp_executesql 速度慢的博客问题:以及 SQL Server MVP 的 Dan Guzman 回答:http ://social.msdn.microsoft.com /Forums/en-US/transactsql/thread/3cb08860-49a0-432a-8605-0af6b374dded/

另一个可能的问题是参数和列数据类型之间的数据类型不匹配,从而导致非 sargable 表达式和错误的计划。如果您需要进一步的帮助,请发布您的查询和表格 DDL。

所以我加倍检查,结果发现 table2 的电子邮件和 SiteId 字段都设置为“Nullable”,将它们更改为匹配 table1 解决了这个问题。

于 2013-04-10T08:41:02.943 回答