【发布时间】:2011-10-12 05:53:12
【问题描述】:
我有两个包含以下列的表格:
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 在 Table2 中匹配,则计数的预期结果应该是 500,000。
当我在 Oracle(v11 或 v10)中运行这些查询时,SQL #2 似乎需要很长时间,我不得不在 10 到 15 分钟后停止运行查询。 SQL #1 和 #3 似乎在不到一秒的时间内立即返回了完整的 500,000 条记录的结果。起初,我认为这是一个索引问题,但添加索引并不能解决问题。我在 TOAD 和 SQL Developer 中尝试了这个查询,结果相同。
我在这里不知所措,因为 Table1 中的 BATCH_NUM 列是 VARCHAR2 并且您认为数据类型的隐式转换会导致查询速度变慢,而不是比未转换的比较快。有人可以解释一下吗?
【问题讨论】:
-
能否请您也发布三个查询的解释计划结果?