我有兩個表有以下欄目:的Oracle SQL Where條件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
}
表1已經有20萬次的記錄和表2有500000條記錄
我有簡單連接,如下所示:
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')
從計數預期的結果應該在50萬,如果從表1的每BATCH_NUM是「400012」,所有的ID的比賽了表2中。
當我在Oracle(v11或v10)中運行這些查詢時,SQL#2似乎需要永久使用,並且我必須在10到15分鐘後停止運行查詢。 SQL#1和#3似乎在不到一秒的時間內即刻帶回500,000條記錄的結果。起初,我認爲這是一個索引問題,但添加索引不會解決問題。我在TOAD和SQL Developer中嘗試了這個查詢,獲得了相同的結果。
因爲Table1中的BATCH_NUM列是VARCHAR2,所以我覺得很遺憾,您會認爲數據類型的隱式轉換會導致查詢速度變慢,而不會比未轉換的比較速度更快。有人可以解釋這個嗎?
您能否發佈三個查詢的解釋計劃結果嗎? – Ollie