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