oracle 两列数据比较,Oracle SQL Where Condition将varchar2字段与数字或字符串进行比较...

我有两个包含以下列的表:

Table1

{ ID NUMBER(15),

ROLL_NUM VARCHAR2(9),

BATCH_NUM VARCHAR2(6),

ACCT_BALANCE NUMBER(15,2)

}

Table2

{ Table1_ID NUMBER(15) REFERENCES TABLE1.ID,

SEQ_NUM NUMBER(2),

TRANS_NUM VARCHAR2(10),

TRANS_AMT NUMBER(8,2),

TRANS_DT DATE

}

Table1有200,000条记录,Table2有500,000条记录

我有简单的连接如下:

SQL#1:

SELECT A.ROLL_NUM, A.ACCT_BALANCE, B.TRANS_NUM, TRANS_AMT, TRANS_DT

FROM TABLE1 A, TABLE2 B

WHERE B.Table1_ID = A.ID

AND A.BATCH_NUM = 400012

SQL#2:

SELECT A.ROLL_NUM, A.ACCT_BALANCE, B.TRANS_NUM, TRANS_AMT, TRANS_DT

FROM TABLE1 A, TABLE2 B

WHERE B.Table1_ID = A.ID

AND A.BATCH_NUM = '400012'

SQL#3:

SELECT A.ROLL_NUM, A.ACCT_BALANCE, B.TRANS_NUM, TRANS_AMT, TRANS_DT

FROM TABLE1 A, TABLE2 B

WHERE B.Table1_ID = A.ID

AND A.BATCH_NUM = TO_NUMBER('400012')

如果Table1中的每个BATCH_NUM都是'400012'并且所有ID在表2中匹配,则计数的预期结果应为500,000。

当我在Oracle(v11或v10)中运行这些查询时,SQL#2似乎需要永远,我不得不在10到15分钟后停止运行查询。 SQL#1和#3似乎在不到一秒的时间内立即返回结果,包含完整的500,000条记录。起初,我认为这是一个索引问题,但添加索引并不能解决问题。我在TOAD和SQL Developer中尝试了这个查询,结果相同。

我在这里不知所措,因为Table1中的BATCH_NUM列是VARCHAR2,您认为数据类型的隐式转换会导致查询速度变慢,而不是比未转换的比较速度快。有人可以解释一下吗?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值