我正在针对一个相当大的表运行此查询(我想,大约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”设置是否会对此产生任何影响?我如何调试并找到问题?
谢谢!
答案 0 :(得分:0)
感谢您的帮助!
我终于找到了这个问题(这有点令人尴尬)...我在msdn论坛上发现这个关于sp_executesql缓慢的博客问题: 和Dan Guzman是SQL Server MVP的答案:http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/3cb08860-49a0-432a-8605-0af6b374dded/
另一个可能的问题是参数和列数据类型之间的数据类型不匹配,从而导致不可分析的表达式和错误的计划。如果您需要进一步的帮助,请发布您的查询和表格DDL。
所以我加倍检查,结果表明table2将Email和SiteId字段设置为“Nullable”,将它们更改为匹配table1修复了问题。