SqlDataReader执行TSQL比ManagementStudio执行TSQL更快

SqlDataReader执行TSQL比ManagementStudio执行TSQL更快,tsql,datareader,ssms,Tsql,Datareader,Ssms,如果我在ManagementStudio中运行TSQL语句,并通过SqlDataReader运行相同的查询,后者给出的结果比前者更快 任何原因???可能与在SSMS中显示结果所需的时间有关?这可能与结果集的大小有关 结果集有多大?一种可能性是连接状态不同-尤其是集选项等-不仅是明显的选项(统计、分析等),甚至像ANSI_NULLS这样的东西也会对某些查询产生很大影响(尤其是xml列或peristed计算列) 另外,当你阅读数据时,你在做什么?你在展示它吗?存储它?就这么扔了?SSMS必须将其缓冲

如果我在ManagementStudio中运行TSQL语句,并通过SqlDataReader运行相同的查询,后者给出的结果比前者更快


任何原因???

可能与在SSMS中显示结果所需的时间有关?这可能与结果集的大小有关


结果集有多大?

一种可能性是连接状态不同-尤其是
选项等-不仅是明显的选项(统计、分析等),甚至像ANSI_NULLS这样的东西也会对某些查询产生很大影响(尤其是xml列或peristed计算列)

另外,当你阅读数据时,你在做什么?你在展示它吗?存储它?就这么扔了?SSMS必须将其缓冲在类似表格的机制中,以便在网格中显示。。。如果将其解析为标准的类型化类(已经与表布局匹配),或者只是删除未经处理的行,那么要做的工作就更少了

据我回忆,它还批量更新屏幕-表明正在进行一些线程处理。。。这里有很多变量…

一些想法:

唯一确切知道的方法是使用SQL事件探查器捕获持续时间等。SSM需要资源来获取结果集并显示它。您如何处理SQL数据读取器结果?或者

或者,这些都在您的PC上,还是您在服务器上运行SqlDataReader


或者,您是先通过SSMS运行查询,以便缓存和编译计划,并将数据存储在内存中吗?

我运行的Tsql查询没有基于集合的操作……我只是想通过在一台服务器上运行select查询来检查时差,该服务器提供了163336个记录集,其中包含15列各种数据类型。我在ssms底部显示时间的状态栏中记录了时间

我也对SqlDataReader运行了相同的查询。我在两种形式的查询阅读器中多次运行相同的select查询(注意,案例和空间都是相同的)

sqldatareader所用的时间从15-28秒不等,而ssms上的查询时间从29-31秒不等


但我并不是在同一时间运行它们,但是交替多次…因此我不认为网络带宽、内存或CPU使用会否认使用datareader执行的tsql比在ssms中执行的tsql具有更好的性能

您的SQL Server Management Studio是否在64位操作系统上运行?对于特定的查询。总的来说,这证明不了什么。为什么不使用基于集合的操作?用基于挫折的解决方案替换光标会快得多。当它对以后可能看到它的人毫无帮助时,为什么要接受它作为答案(对你自己的问题)。马克有一个很好的答案;我在
SET
选项中遇到了差异,这对查询性能有很大影响,因此在我的应用程序中运行查询和在SSMS中运行查询之间存在很大差异。