请教一个调用OCIStmtFetch2比较慢的问题,每隔1000行卡死2分钟

莱昂纳多达芬奇 2015-05-14 09:39:22
SQL语句稍微有点复杂,类似于:
WITH MYTABLE AS
(
SELECT XXX FROM TABLE1
START WITH aaa IN (SELECT AAA FROM TABLE2)
CONNECT BY PRIOR aaa=bbb
UNION ALL
SELECT XXX FROM TABLE3
UNION ALL
SELECT XXX FROM TABLE4
)
SELECT F1, F2 FROM TABLE5
WHERE KEY IN (SELECT XXX FROM MYTABLE)


SQL语句在PL/SQL中执行是比较快的,用时3~5秒,返回大约1.5w行数据。
在C++程序中,执行非常慢,后来用日志跟踪,发现Fetch数据时每隔1000行左右就卡2分钟,第二个1000行卡2分钟+7~8秒,第三个1000行卡2分钟+7~8秒x2,以此类推。。。最后执行完需要40分钟。

如果注释掉With段中的递归部分(这个表有10w+数据),执行会稍微快一点,但依然不理想,用时大约10秒+。

如果直接执行SELECT * FROM TABLE2,返回10w+行数据也是在1,2秒内完成的。

另,TABLE2大表一共2,3个字段,每个字段上都有索引了。

可能是什么问题呢??
...全文
266 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
补充:其实2分钟+7~8秒xN的间隔不是非常规律,但是这个间隔基本上是递增的。

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧