首页 > 解决方案 > 在我的代码中执行存储过程的问题

问题描述

我有一个返回一组 8 个integer值的存储过程。一开始似乎一切都以正确的方式执行,但是在我使用TADOQuery执行时间在我的 C++ 代码中执行它时执行了一些操作,但在 SSMS 中却没有,执行时间仍然正确。

在第一步中,我尝试改进我的存储过程以使其更具性能意识。我赢得了一些执行时间,但问题仍然存在。

我还尝试检查我的代码,搜索一些可能会延长执行时间的荒谬行。但是我在其他存储过程中使用了相同的代码,它们并没有显示出相同的效果。

所以我使用 SQL Profiler 来查看到底发生了什么。您可以在下面看到一个好的执行和一个坏的执行之间的区别。


执行力好

 CPU | Reads | Writes | Duration 
 93  | 13657 | 0      | 113


执行不力

 CPU      | Reads    | Writes | Duration
 22090    | 31960629 | 0      | 25158

如您所见,读取和 CPU 访问的值呈指数增长。

如果我在 SSMS 查询编辑器中执行相同的存储过程,结果将直接得到良好的执行。

我只是希望我的存储过程总是以或多或少相同的持续时间执行,无论我在哪里执行查询。

标签: c++sql-serverssmsc++builder

解决方案


已经看过好几次了——它吸引了我们很多人。根据您的呼叫检查设置,例如 ansi null 开/关、其他设置等。这样的更改会导致不同的执行计划。有关详细信息,请参阅 ssms 中的 SQL 比应用程序中更快


推荐阅读