Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

查询ORACLE数据库效率问题

chinasa  发表于:2017-03-15 09:26:41  
复制

 

我用如下代码,来查询ORACLE数据库数据,大概需要20多秒时间,而我如果直接通过链接表建立查询,则只需要1秒不到就能检索出相同的内容。请问如何优化?

PS:SQL语句我是通过查询SQL视图复制过来的(增加了to_CHAR函数),所以理论上语句及检索条件差不多,但不知为什么效率却差很多,请高手指点,谢谢。

 

 

connstr = "DRIVER={Microsoft ODBC for Oracle};SERVER=" & strDBName & ";UID=" & strUserID & ";PWD=" & strPassword & ";"
ConnDB.CursorLocation = adUseServer
ConnDB.Open connstr

DoCmd.SetWarnings 0

DSTAR = Forms!Open!DSTAR
DEND = Forms!Open!DEND

strSQL = "SELECT t1.A, t1.B" _
          & " FROM TABL1 t1 INNER JOIN TABLE2 t2 ON t1.XX_ID = t2.XX_ID" _
          & " WHERE ((to_CHAR(t1.DATE1,'yyyy-mm-dd') Between  '" & DSTAR & "' And '" & DEND & "') AND (SUBSTR(t1.ABC,1,3)= 'XXX') AND ((t2.DEF)='YYY'))"


rst.Open strSQL, ConnDB, 3, adLockPessimistic

 

 

Top
红尘如烟 发表于:2017-03-15 09:58:00

你既然用ADO,为什么还要去用ODBC驱动呢?多此一举。

要么用ADO,直接用 OraOLEDB.Oracle 驱动或者 MSDAORA 驱动才对。

要么用DAO,直接用链接表。

要么用传递查询。

随便哪种方式,都比你在ADO里面用ODBC 驱动好。



chinasa 发表于:2017-03-15 10:11:22

红尘如烟老师,感谢指点!

关键是我现在只会这一种方法,您说的方法中哪种相对简单点的,能给点实例指导吗?万分感谢!



chinasa 发表于:2017-03-15 10:17:06

由于涉及数据信息安全问题,链接表的方式暂时不考虑。



chinasa 发表于:2017-03-15 10:24:48

    ConnStr = "Provider = oraOLEDB.Oracle;" & _
              "Data Source=" & strDBName & ";" & _
              "User ID=" & strUserID & ";" & _
              "Password=" & strPassword & ";"

 

把语句更改为上述代码,运行速度仍然比较慢。



chinasa 发表于:2017-03-15 10:40:03

尝试了传递查询,速度仍然没发跟链接表查询相比。



chinasa 发表于:2017-03-15 14:54:34

发现影响速度的主要是后面的代码,我忘记附上来了。

If rst.RecordCount <= 0 Then
MsgBox "检索结果为空"
Exit Sub
End If

 

If rst.RecordCount > 0 Then
rst.MoveFirst
Do Until rst.EOF
rs.AddNew
rs![a] = rst(0)
rs![B] = rst(1)
rs![C] = rst(2)
rs![D] = rst(3)
rs![E] = rst(4)

rs.Update
rst.MoveNext
Loop
End If

 



总记录:6篇  页次:1/1 9 1 :