oracle timestamp条件,oralce的TIMESTAMP型字段作为联系关系条件

oralce的TIMESTAMP型字段作为关联条件

两个表,表A的内容是一个列表,表B的内容是其明细。

A表,表名:HEAD

B表,表名:DETAIL

HEAD表主键

字段 型

店铺代码 VARCHAR2(10)

番号1 NUMBER(2)

营业日 TIMESTAMP(6)

番号2 NUMBER(6)

DETAIL表主键

字段 型

店铺代码 VARCHAR2(10)

番号1 NUMBER(2)

营业日 TIMESTAMP(6)

番号2 NUMBER(6)

行番号 NUMBER(5)

HEAD表的数据量有上百万条,DETAIL表的数据量有上千万条,

两表关联,SQL如下:

SELECT

--HEAD表

H.AAA

--DETAIL表

D.BBB

FROM

HEAD H

INNER JOIN

DETAIL D

ON H.店铺代码 = D.店铺代码

AND H.番号1 = D.番号1

AND H.营业日 = D.营业日

AND H.番号2 = D.番号2

WHERE

ROWNUM < 100000

ORDER BY

H.营业日,

H.店铺代码,

H.番号1,

H.番号2,

D.行番号

因为如果不做ROWNUM 小于10万条的限制的话,结果会超过10万条,不便于分析。

上述语句执行的很久,后来将关联条件营业日做了如下调整,检索速度就上来了,

AND TO_CHAR(H.营业日, 'YYYYMMDD') = TO_CHAR(D.营业日, 'YYYYMMDD') --营业日

这么做的理由是,营业日虽然是TIMESTAMP型,但是实际存储的数据,是日期形式的,不包括时刻,即:

13-03-01 00:00:00.000000

所以,可以忽略时刻部分。

以下是完整的SQL语句:

SELECT

--HEAD表

H.AAA

--DETAIL表

D.BBB

FROM

HEAD H

INNER JOIN

DETAIL D

ON H.店铺代码 = D.店铺代码

AND H.番号1 = D.番号1

AND TO_CHAR(H.营业日, 'YYYYMMDD') = TO_CHAR(D.营业日, 'YYYYMMDD') --营业日

AND H.番号2 = D.番号2

WHERE

ROWNUM < 100000

ORDER BY

H.营业日,

H.店铺代码,

H.番号1,

H.番号2,

D.行番号

以上是在开发过程中,碰到一个问题,记录下来,不知道大家是否碰到和我类似的问题。

顺带说一句,当ROWNUM < = 1万的时候,上面两种方式的检索时间没多大差别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值