我在VB6中填充ADO记录集时遇到了问题.当我使用SSMS运行它时,查询(命中SQLServer 2008)只需要大约1秒的时间.当结果集很小时它工作正常,但是当它成为几百条记录时需要很长时间.800多条记录需要大约5分钟才能返回(查询在SSMS中仅需要1秒),而6000+记录需要大约20分钟.我通过增加命令超时来"修复"异常,但我想知道是否有办法让它更快地工作,因为它似乎不是需要这么多时间的实际查询.诸如压缩结果之类的东西,所以它不需要那么长时间.记录集打开如下:
myConnection.CommandTimeout = 2000
myConnection.ConnectionString = "Provider=SQLOLEDB;" & _
"Initial Catalog=DB_NAME;" & _
"Data Source=SERVER_NAME" & _
"Network Library=DBMSSOCN;" & _
"User ID=USER_NAME;" & _
"Password=PASSWORD;" & _
"Use Encryption for Data=True;"
myConnection.Open
myRecordSet.Open STORED_PROC_QUERY_STRING, myConnection, adOpenStatic, adLockReadOnly
Set myRecordSet.ActiveConnection = Nothing
myConnection.Close
Run Code Online (Sandbox Code Playgroud)
数据返回用于填充组合框的3列.
更新:我运行SQL事件探查器,来自客户端计算机的实例进行更多读取,并且比SSMS中的查询的两个度量标准花费更多时间100倍.根据探查器,SSMS和客户端计算机的查询文本是相同的,因此我认为它不应该使用不同的执行计划.网络图书馆或提供商可能会对此产生任何影响吗?
Profiler统计:
看起来它正在使用不同的执行计划,但查询完全相同,我不确定如何检查客户端可能正在使用的执行计划,如果它与SSMS中显示的不同.