假设有两个表:
TRANSACTION
Primary Key: REF_NO
Columns: REF_NO, TXN_DATE, ITEM_CODE, QUANTITY
ITEM
Primary Key: ITEM_CODE
Columns: ITEM_CODE, ITEM_DESC
查询(1):
SELECT T.REF_NO, T.TXN_DATE, T.ITEM_CODE,
I.ITEM_DESC,
T.QUANTITY
FROM TRANSACTION T, ITEM I
WHERE T.ITEM_CODE = I.ITEM_CODE
查询(2):
SELECT T.REF_NO, T.TXN_DATE, T.ITEM_CODE,
(SELECT ITEM_DESC FROM ITEM WHERE ITEM_CODE = T.ITEM_CODE) AS ITEM_DESC,
T.QUANTITY
FROM TRANSACTION T
必要时,两个表上都有索引(索引)。
以上是我正在做的事情的一个非常简化的版本,但概念是相同的。
有人告诉我,(1)由于索引而更有效,而解释计划实际上表明它是。(1)的解释计划显示了两个表的索引访问。(2) 的解释计划显示对 ITEM 的索引访问,但对 TRANSACTION 的全表访问。
但我的困境是,当我在非常大的数据集上运行它们以计算实际性能时,(2)比(1)快四倍!可能的原因是什么?为什么我应该选择(1)而不是(2)?(我们决定选择(2)而不是(1)。)