我有两个包含以下列的表:
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,您认为数据类型的隐式转换会导致查询速度变慢,而不是比未转换的比较速度快。有人可以解释一下吗?