从asp.net / .ajax调用时,存储过程会花费很多时间,但会批量执行

时间:2011-03-28 01:06:31

标签: ajax tsql sql-server-2008

我正在跟踪sql server profile在asp.page中通过Ajax调用的存储过程。

此过程采用10个用户定义的表类型(表)参数。

我们称之为MyProc。

当我从.ajax调用MyProc时,它在SQL Profiler中显示:“RPC Starting”事件和My Proc> 10分钟完成。

当我复制粘贴[MyProc脚本调用]并将其粘贴到SSMS(从分析器中的SSMS =批处理事件(BatchStartin,BatchCompleted)执行批处理)时,执行需要3个seonds.Is normal。

有没有人遇到过这种情况?有任何想法。

2 个答案:

答案 0 :(得分:0)

我遇到了一个非常相似的问题。我的问题很简单:表需要一个索引。我不知道细节,但参数化查询使索引问题更加严重。如果我在没有参数的情况下运行查询,那么速度很快,但是对于它们来说它太可怕了。一旦添加了索引,就可以了。

答案 1 :(得分:0)

我不像以前那样精通SQL,但我会尝试重建存储过程。如果您在表中没有数据时构建存储过程或者表的性质随着时间的推移而变化,那么您所描述的内容过去非常常见。

存储过程工作得非常快,因为它可以节省一些初步(和耗时)任务,例如解析和查询计划。如果您的数据库内容与现在看起来有很多不同,那么查询计划可能会偏离,并以最低效的方式查找数据。当您在存储过程之外执行脚本时,查询计划是根据其对搜索所需数据的最新理解从头开始构建的,因此无论您的表中的内容或表格如何,它都将始终如一地快速生成随着时间的推移已经发生了变化。

基本上,只要存储过程返回的速度比在常规查询中执行的速度慢,它就是存储过程的查询计划需要更新的标志。