查看: 3958|回复: 4

如何优化存在connectby子查询的语句?

[复制链接]
论坛徽章:
0
跳转到指定楼层
1#
发表于 2010-5-11 14:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现有视图如下,其功能相当于oracle的start with... connect by...(展现每个节点的所有上层节点串)
create view V_SYS_ORG_LVL_O as
  WITH n(ORGANIZE_ID,ORGANIZE_NAME,PARENT_ORGANIZE_ID,ORG_LEVEL,ORG_AREA_TYPE,ORG_COOP_TYPE,STATE,level,chain)
  AS (
  SELECT ORGANIZE_ID,ORGANIZE_NAME,PARENT_ORGANIZE_ID,ORG_LEVEL,ORG_AREA_TYPE,ORG_COOP_TYPE,STATE,1,'#' || CAST(char(int(ORGANIZE_ID)) AS VARCHAR(300))
  FROM SYS_ORGANIZE a WHERE PARENT_ORGANIZE_ID=-1
  UNION ALL
  SELECT a.ORGANIZE_ID,a.ORGANIZE_NAME,a.PARENT_ORGANIZE_ID,a.ORG_LEVEL,a.ORG_AREA_TYPE,a.ORG_COOP_TYPE,a.STATE,n.level + 1, n.chain || '#' || char(int(a.ORGANIZE_ID))
  FROM SYS_ORGANIZE a, n
  WHERE n.ORGANIZE_ID = a.PARENT_ORGANIZE_ID
  )
  SELECT ORGANIZE_ID,ORGANIZE_NAME,PARENT_ORGANIZE_ID,ORG_LEVEL,ORG_AREA_TYPE,ORG_COOP_TYPE,STATE,level ACT_ORG_LVL,REPLACE(chain,' ','') || '#' ORG_PATH
  FROM n;
  
当直接查询V_SYS_ORG_LVL_O时,速度很快。
但当把该视图作为一个子查询时,例如 select * from tab_a a,V_SYS_ORG_LVL_O b where a.col=b.col
速度很慢(当使用笔记本本机数据库时,会基本很难查询出来,而使用服务器数据库时,大概会用半分钟左右),
且查询解析计划时会说是递归错误(递归公共表表达式 "N" 可能包含无限循环).
这时如果把视图改为表,即创建表T_SYS_ORG_LVL_O ,再 insert into T_SYS_ORG_LVL_O select * from V_SYS_ORG_LVL_O
再查询select * from tab_a a,T_SYS_ORG_LVL_O b where a.col=b.col,则速度很快。

这个问题应该就出在这个递归子查询上,请问有没有办法进行优化?迷茫中
论坛徽章:
0
2#
 楼主| 发表于 2010-5-11 14:05 | 只看该作者
oracle中应该也会存在类似的效率问题

使用道具 举报

回复
论坛徽章:
3
2009日食纪念
日期:2009-07-22 09:30:00祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:20:05
3#
发表于 2010-5-11 14:06 | 只看该作者
干脆创建成MQT试试看?

使用道具 举报

回复
论坛徽章:
0
4#
 楼主| 发表于 2010-5-11 16:35 | 只看该作者
呵呵,目前就是这么解决的,但实时更新,会有时间差,表短时间为空。
每晚更新,会有数据延时。

其实这个问题应该许多系统都会出现,connect by的视图就是员工组织机构的统一查询视图,很多应用都会基于这种查询

使用道具 举报

回复
论坛徽章:
2
2010新春纪念徽章
日期:2010-03-01 11:19:07ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
5#
发表于 2010-5-11 21:59 | 只看该作者
降低查询优化级别,看是否会有所提升?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表