我们被迫使用Microsoft ODBC Driver for Oracle作为将ADO上的Excel VBA连接到Oracle 11GR2数据库的方法。
我们注意到从相对简单的视图返回数据非常慢(视图在SQL Developer中快速执行)...但是如果我们从视图结果中派生出一个表...并对表执行查询,然后Excel在大约10秒内返回数据。它返回了11,000条记录。
当我们浏览视图时,我们看到数据开始返回(因此视图已完成其工作并执行),但随后记录集复制到工作表中完成 - 需要6分钟。
使用从视图派生的表,需要10秒。
我很喜欢使用oracle oledb驱动程序的奢侈(不要问),但如果可能的话,不需要解决这个问题。
strConOracle = "Driver={Microsoft ODBC for Oracle}; " & _
"CONNECTSTRING=(DESCRIPTION=" & _
"(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST=" & "myserver.mycompany.net" & ")(PORT=1524))" & _
"(CONNECT_DATA=(SERVICE_NAME=" & SID & "))); uid=" & username & " ;pwd=" & password & ";"
'--- Now connection is open and you can use queries to execute them.
'--- It will be open till you close the connection
'sql = "Select * from TEMP_TABLE_FROM_MY_VIEW" VERY FAST < 10 seconds 11,000 rows
sql = "Select * from MY_VIEW"
Sheet1.Cells.ClearContents
Set rs = con.Execute(sql)
'6 minutes executing the view, with data seen in worksheet very quickly (view resolved)
Sheet1.Range("A2").CopyFromRecordset rs
更新:它似乎与大字符宽度有关。所以我们有varchar2(4000)字段,包含~2-300个字符(我们正在复制另一个数据环境)。 Oledb工作正常,但这个ODBC驱动程序 - 它杀了它。我们正在转向varchar2(300)以获得更好的性能,但它仍然很慢(但是有所改进)。