gpt4 book ai didi

c# - 为什么数据库查询只会在应用程序中变慢?

转载 作者:行者123 更新时间:2023-11-30 15:09:54 26 4
gpt4 key购买 nike

我有一个网页需要 10 分钟才能对数据库运行一次查询,但从 SQL Server Management Studio 运行时,相同的查询会在不到一秒内返回。

该网页只是在执行存储过程的数据库中触发 SQL,而该存储过程又对四个表执行非常简单的选择。同样,代码是基本的 ADO,在 SqlCommand 上设置 CommandText,然后执行 ExecuteReader 以获取数据。

该网页通常运行速度很快,但是当它变慢时,唯一可以加快速度的方法是对正在查询的表上的索引进行碎片整理(不同的时间不同),这在相同的情况下似乎没有意义查询手动执行得如此之快。

我看过this question但它并不适用,因为网页实际上只是在数据库中触发文本。

有没有人知道为什么这会以一种方式变慢而不是另一种方式变慢?谢谢

最佳答案

我怀疑参数嗅探。

由于不同的 set 选项,您的 SSMS 连接可能无法使用用于应用程序连接的缓存执行计划,因此它将生成一个新的不同计划。

您可以使用以下查询检索存储过程的缓存计划。然后比较看看它们是否不同(例如,速度慢的是在另一个进行扫描的地方进行索引查找和书签查找吗?)

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'

关于c# - 为什么数据库查询只会在应用程序中变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3831644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com