c++ - 在我的代码中执行存储过程的问题
问题描述
我有一个返回一组 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 查询编辑器中执行相同的存储过程,结果将直接得到良好的执行。
我只是希望我的存储过程总是以或多或少相同的持续时间执行,无论我在哪里执行查询。
解决方案
已经看过好几次了——它吸引了我们很多人。根据您的呼叫检查设置,例如 ansi null 开/关、其他设置等。这样的更改会导致不同的执行计划。有关详细信息,请参阅 ssms 中的 SQL 比应用程序中更快。
推荐阅读
- apache-spark - 将展开内存转移到存储内存失败
- python - 我想在张量流中使用学习权重
- oracle - 从 Oracle 到 Postgres 的日期兼容函数
- javascript - React:将新道具传递给组件时,构造函数中声明的 this.var 不会更新
- ruby-on-rails - 建立依赖于他人的关系模型
- python - 在python中并行分割索引处的长字符串
- c - 用双/浮点变量计算
- mysql - 我的查询何时返回 null?(N个最高工资问题)
- javascript - 如何在javascript中动态使用“require”?
- linux - SocketCAN 和传入数据包控制