select count(1)
from 表A t1
where 1 = 1
and issend = 0
and exsits (select 'x'
from (select t4.doc_info_id
from 表B t4
where t4.dept_code = '10005000'
and t4.ctrl_kind = 5
and t4.doc_info_kind > 0
and rownum <= 1) t5
where t5.doc_info_id = t1.doc_receive_regin_id)
from 表A t1
where 1 = 1
and issend = 0
and exsits (select 'x'
from (select t4.doc_info_id
from 表B t4
where t4.dept_code = '10005000'
and t4.ctrl_kind = 5
and t4.doc_info_kind > 0
and rownum <= 1) t5
where t5.doc_info_id = t1.doc_receive_regin_id)
解决方案 »
- 关于 webservice 查询 表,提示OCI-22054的问题
- 如何查找oracle中用户自定义函数信息
- 有人研究过Oracle Streams性能方面吗?
- linux下的oracle 有个y2base的进程一直在运行,这是干什么用的
- 关于oracle上在两个不同机器上的数据库数据的导入问题
- dbms_lob问题
- 用pl/sql developer导出表,在其他数据库导入时,提示表或视图不存在?大侠们救命!!!
- 请问,如何实现一个UPDATE的SQL文里每一万条COMMIT一次
- win2k下的Oracle9i在修改IP和机器名后起不来怎么办?高手指教,急!!!!!
- oracle 9i/OCP/DBA
- 关于数据库同步的问题
- ORACLE语句效率优化
表A按doc_receive_regin_id,issend建索引
2.表B不要用*,只需要返回必要的字段就可以
3.确认下表分区后10005000分区数据量,看还能否再加过滤条件,比如时间,你的SQL可能DOC_RECEIVE_REGIN_ID字段上的索引也没用到的,建议再把执行计划发出来(用autotrace输出的执行计划)给你个参考的SQL:
WITH T AS
(SELECT T4.DOC_INFO_ID
FROM 表B T4
WHERE T4.DEPT_CODE = '10005000'
AND T4.CTRL_KIND = 5
AND T4.DOC_INFO_KIND > 0)
SELECT COUNT(*)
FROM 表A T1
WHERE 1 = 1
AND ISSEND = 0
AND EXSITS (SELECT 1
FROM T T4
WHERE T.DOC_INFO_ID = T1.DOC_RECEIVE_REGIN_ID
AND ROWNUM <= 1);
from (select count(distinct *)
from 表A t1
where 1 = 1
and issend = 0)
join (select doc_receive_regin_id
from 表B t4
where t4.doc_info_id = t1.doc_receive_regin_id
and t4.dept_code = '10005000'
and (t4.ctrl_kind = 5)
and t4.doc_info_kind > 0
and rownum <= 1)
on t1.doc_receive_regin_id = t4.doc_receive_regin_id)
from (select *
from 表A t1
where 1 = 1
and issend = 0)
join (select doc_receive_regin_id
from 表B t4
where t4.doc_info_id = t1.doc_receive_regin_id
and t4.dept_code = '10005000'
and (t4.ctrl_kind = 5)
and t4.doc_info_kind > 0
and rownum <= 1)
on t1.doc_receive_regin_id = t4.doc_receive_regin_id)a