我在使用VB6中的ADO记录集填充时遇到了问题。查询(命中SQLServer 2008)仅需要约1秒钟即可在SSMS中运行。当结果集很小时,它可以正常工作,但是当它变成几百条记录时,它会花费很长时间。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
数据返回3列用于填充组合框。
更新: 我运行了SQL Profiler,并且从客户端机器发出的实例读取更多数据,并且用时是在SSMS中查询的两个指标的100倍。根据分析器,查询的文本对于SSMS和客户端机器是相同的,因此我认为它不应该使用不同的执行计划。网络库或提供程序会对此产生任何影响吗?
Profiler统计信息:
- 来自客户端应用程序:7041720次读取,59458毫秒持续时间,3900行计数 - 来自SSMS:30802次读取,238毫秒持续时间,3900行计数
看起来它正在使用不同的执行计划,但查询完全相同,我不确定如何检查客户端可能正在使用的执行计划是否与在SSMS中显示的执行计划不同。