ORACLE时间段查询优化的问题

qing7759 2013-04-02 07:09:17
我建了一个表,里面有日期(RQ),时间(SJ)两个字段,都是DATE类型,我建立了一个查询,目的是找到两个日期之间所有的数据。

我的SQL语句是这样写的:

SELECT SID, SSJSID, RQ, SJ,
FROM JING_SS WHERE SID IN
(SELECT SID FROM JING_SS WHERE RQ IN( SELECT RQ FROM JING_SS WHERE TO_CHAR(RQ,'yyyyMMdd') BETWEEN 开始日期 AND 结束日期 ))
AND SID NOT IN (SELECT SID FROM JING_SS WHERE TO_CHAR(SJ,'HH24mmss') < 开始时间 AND TO_CHAR(RQ,'yyyyMMdd') = 开始日期 )
AND SID NOT IN (SELECT SID FROM JING_SS WHERE TO_CHAR(SJ,'HH24mmss') > 结束时间 AND TO_CHAR(RQ,'yyyyMMdd') = 结束日期)
AND SSJSID IN (SELECT SID FROM COM_DW CONNECT BY PRIOR SID = FID START WITH SID = 单位编号 )
ORDER BY SID;

在数据量少的时候查询速度还是能够忍受的,可是现在有大约60万条数据,时间就太长了,我想优化这条查询,请教各路大神!拜谢!!!

分不多,谢谢各位,如果可行马上给分。
...全文
1010 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qing7759 2013-04-04
  • 打赏
  • 举报
回复
您这个方法有几个问题:一个是转换有些问题,需要稍作修改,另一个问题是,在日期时间合并过程中,会损失少许性能,我测试后使用如下方法,在大约56万条记录的实验中,速度能比您的方法快1秒钟左右。 SELECT SID, SSJSID, RQ, SJ FROM JING_SS Where to_char(rq,'yyyyMMdd') between 开始日期 and 结束日期 and not (to_char(sj,’hh24mmss')<开始时间and to_char(rq,'yyyyMMdd')=开始日期) and not (to_char(sj,'hh24mmss')>结束时间and to_char(rq,'yyyyMMdd')=结束日期) and ssjsid in (select sid fromcom_dw connect by prior sid=fid start with sid=单位编号) Order by sid; 不过还是非常感谢!给分了。
qing7759 2013-04-03
  • 打赏
  • 举报
回复
谢谢,我去试试看,如果有效马上给分。
hupeng213 2013-04-03
  • 打赏
  • 举报
回复
你可以把日期和时间字段组合在一起比较的吧 SELECT SID, SSJSID, RQ, SJ, FROM JING_SS WHERE TO_DATE(RQ || ' ' || SJ,'yyyy-mm-dd HH24:mi:ss') BETWEEN TO_DATE(开始日期 || ' ' || 开始时间,'yyyy-mm-dd HH24:mi:ss') and TO_DATE(结束日期 || ' ' || 结束时间,'yyyy-mm-dd HH24:mi:ss')
qing7759 2013-04-02
  • 打赏
  • 举报
回复
在线等各位~

17,090

社区成员

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

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