我对索引和解释计划很陌生,所以请多多包涵!我正在尝试调整查询,但我遇到了问题。
我有两张桌子:
SKU
------
SKUIDX (Unique index)
CLRIDX (Index)
..
..
IMPCOST_CLR
-----------
ICCIDX (Unique index)
CLRIDX (Index)
...
..
当我执行 aselect * from SKU where clridx = 122
时,我可以看到它正在使用解释计划中的索引(它说 TABLE ACCESS.. INDEX,它说 OBJECT_NAME 下的索引名称,选项是 RANGE SCAN)。
现在,当我尝试加入同一个字段时,它似乎没有使用索引(它说 TABLE ACCESS.. HASH JOIN 并且在选项下,它说 FULL)。
我应该寻找什么来尝试看看它为什么不使用索引?抱歉,我不确定要键入什么命令来显示此内容,所以如果您需要更多信息,请告诉我。
示例:
第一个查询:
SELECT
*
FROM
AP21.SKU
WHERE
CLRIDX = 100
第二个查询:
SELECT
*
FROM
AP21.IMPCOST_CLR
WHERE
CLRIDX = 100
第三个查询:
SELECT
*
FROM
AP21.SKU
INNER JOIN
AP21.IMPCOST_CLR ON
IMPCOST_CLR.CLRIDX = SKU.CLRIDX