ORACLE时间段查询优化的问题。

我建了一个表,里面有日期(RQ),时间(SJ)两个字段,都是DATE类型,我建立了一个查询,目的是找到两个日期之间所有的数据。我的SQL语句是这样写的:SELECTSID... 我建了一个表,里面有日期(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万条数据,时间就太长了,我想优化这条查询,请教专家谢谢!
这是网上朋友的另一个解决办法:

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')

这个方法我试过了,在转换过程中会损失很多性能,效率反而不高。
展开
 我来答
随o天
2013-04-02 · TA获得超过3158个赞
知道大有可为答主
回答量:1740
采纳率:71%
帮助的人:2018万
展开全部
试试下面语句:
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;
追问
您这个语句有些问题我稍作了下修改
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
ssjsid in (select sid from com_dw connect by prior sid=fid start with sid=单位编号)
Order by sid;
追答
not优先级比 and 高,加括号是对的。
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式