我有一个网页需要10分钟才能对数据库运行一个查询,但是从SQL Server Management Studio运行时,同一查询返回的时间不到一秒钟。
该网页只是在执行存储过程的数据库上触发SQL,这反过来又对四个表执行了非常简单的选择。同样,代码是基本的ADO,在SqlCommand上设置CommandText,然后执行ExecuteReader来获取数据。
网页通常可以快速运行,但是当减慢速度时,提高速度的唯一方法是对要查询的表上的索引进行碎片整理(不同时间的不同),当执行相同的查询时似乎没有任何意义。快速手动。
有谁有什么好主意为什么这会以一种方式而不是另一种方式缓慢进行?谢谢
我会怀疑参数嗅探。
由于不同的set选项,用于您的应用程序连接的缓存执行计划可能无法用于您的SSMS连接,因此它将生成一个新的计划。
set
您可以使用下面的查询来检索存储过程的缓存计划。然后进行比较以查看它们是否不同(例如,慢速执行索引搜索并在另一个进行扫描的位置添加书签查找功能吗?)
Use YourDatabase; SELECT * FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) CROSS APPLY sys.dm_exec_query_plan(plan_handle) cross APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa where sys.dm_exec_sql_text.OBJECTID=object_id('YourProcName') and attribute='set_options'