如果我在管理工作室中运行 TSQL 语句并通过 SqlDataReader 运行相同的查询,则后者给出的结果比前者更快......
任何原因??
一种可能性是连接状态不同 - 特别是SET
选项等 - 不仅仅是明显的(统计信息、分析等) - 甚至像 ANSI_NULLS 这样的东西也会对某些查询产生重大影响(尤其是对于 xml 列或 peristed计算列)。
另外 - 当你阅读数据时,你在做什么?你在展示它吗?存储它?只是放下它?SSMS 必须以类似表格的机制对其进行缓冲以在网格中显示...如果您将其解析为标准的类型化类(已经与表格布局匹配) - 或者只是删除未处理的行,那么您的工作量就会减少去做。
据我记得,它还批量更新屏幕 - 表明正在进行一些线程......这里有很多变量......
这可能与在 SSMS 中显示结果所需的时间有关?这可能与结果集的大小有关。
结果集有多大?
一些想法:
确切知道的唯一方法是使用 SQL Profiler 来捕获持续时间等。SSMS 需要资源来获取结果集并显示它。您对 SQL 数据阅读器结果做了什么?或者
或者,这一切都在您的 PC 上,还是您在服务器上运行 SqlDataReader?
或者,您是否首先通过 SSMS 运行查询,以便缓存和编译计划,并将数据存储在内存中?
我正在运行的 Tsql 查询没有基于集合的操作...我只是想通过在服务器上运行选择查询来检查时差,该服务器给出了 163336 个记录集和 15 列各种数据类型。我在显示时间的 ssms 底部的状态栏中记下了时间。
我也用 SqlDataReader 运行了相同的查询。并且我在两种形式的查询阅读器中多次运行相同的选择查询(请注意案例和空格都是相同的)。
sqldatareader 花费的时间从 15-28 秒不等,而 ssms 的查询从 29-31 秒不等......
但是我没有同时运行它们,而是交替运行多次......所以我不认为网络带宽或内存或 CPU 使用率否认使用 datareader 执行的 tsql 提供比在 ssms 中执行的更好的性能