一个3个表查询 数据量大 并用了notexists 速度慢问题

shenqdm 2010-12-03 11:12:04
我要从3个表中查数据 worklist ,workbasket ,work
需求是这样的当worlist 和workbasket表中存在跟work表匹配 b.pxInsName = a.pxRefObjectInsName时取worklist ,workbasket 表中的PXASSIGNEDOPERATORID 其他字段都取自work的字段 当 worlist 和workbasket表中不存在跟work表匹配 b.pxInsName = a.pxRefObjectInsName时取空字符'',
由于数据量比较大而且我用了not exists所以现在查询速度很慢请问给位大侠有没有什么好的解决办法
( Select b.pxInsName AS "pxInsName",a.PXASSIGNEDOPERATORID AS "AssignTo",b.THERAPEUTICAREA AS "TherapeuticArea" FROM worklist a , work b WHERE b.pxInsName = a.pxRefObjectInsName AND b.pxInsName is not null UNION
Select b.pxInsName AS "pxInsName",a.PXASSIGNEDOPERATORID AS "AssignTo",b.THERAPEUTICAREA AS "TherapeuticArea" FROM workbasket a , work b WHERE b.pxInsName = a.pxRefObjectInsName AND b.pxInsName is not null
UNION all Select b.pxInsName AS "pxInsName",'' AS "AssignTo",b.THERAPEUTICAREA AS "TherapeuticArea FROM work b WHERE b.pxInsName is not null and not exists (select a.pxRefObjectInsName from workbasket a where b.PXINSNAME=a.PXREFOBJECTINSNAME union all select c.pxRefObjectInsName from worklist c where b.PXINSNAME=c.PXREFOBJECTINSNAME) )ORDER BY "pxInsName" DESC
...全文
262 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gelyon 2010-12-03
  • 打赏
  • 举报
回复

对你比较的字段增加索引试试呢?
worklist 表的 pxRefObjectInsName 和 work表的pxInsName 以及workbasket表的 pxRefObjectInsName
  • 打赏
  • 举报
回复
--这样试试
not exists (select a.pxRefObjectInsName from workbasket a where b.PXINSNAME=a.PXREFOBJECTINSNAME)
and not exists(select c.pxRefObjectInsName from worklist c where b.PXINSNAME=c.PXREFOBJECTINSNAME)
心中的彩虹 2010-12-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 shenqdm 的回复:]
我要从3个表中查数据 worklist ,workbasket ,work
需求是这样的当worlist 和workbasket表中存在跟work表匹配 b.pxInsName = a.pxRefObjectInsName时取worklist ,workbasket 表中的PXASSIGNEDOPERATORID 其他字段都取自work的字段 当 worlist 和workbasket表中不存在……
[/Quote]

--在关联字段建个索引
--试试 这样
Select b.pxInsName AS "pxInsName",
case when b.pxInsName = a.pxRefObjectInsName then a.PXASSIGNEDOPERATORID
when b.pxInsName = c.pxRefObjectInsName then c.PXASSIGNEDOPERATORID end AS "AssignTo",
b.THERAPEUTICAREA AS "TherapeuticArea"
FROM worklist a , workbasket c ,work b
where b.pxInsName = a.pxRefObjectInsName AND b.pxInsName = c.pxRefObjectInsName AND
b.pxInsName is not null
union all
Select b.pxInsName AS "pxInsName",'' AS "AssignTo",b.THERAPEUTICAREA AS "TherapeuticArea
FROM work b
WHERE b.pxInsName is not null
and not exists (select 1 from workbasket a where b.PXINSNAME=a.PXREFOBJECTINSNAME)
and not exists (select c.pxRefObjectInsName from worklist c where b.PXINSNAME=c.PXREFOBJECTINSNAME)





17,086

社区成员

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

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