连接中不使用唯一索引(包含3列)

时间:2014-01-27 13:38:23

标签: sql oracle join

我有一个关于(非)使用唯一索引的问题。我正在使用Oracle 11g。

表A: col1,col2,col3。 col1-col2-col3 triplet在表A中有一个多列唯一索引。

表B: colX。 colX 是表B的主键。

我的查询是:

SELECT * FROM TABLE_A A
JOIN TABLE_B B ON A.col1 = B.colX
WHERE A.col2 = 10 and A.col3 = 20

当我查看Toad中的解释计划时,我看到“读取TABLE_A中的每一行”。 (完全访问)。

但是,当我编写查询时:

SELECT * FROM TABLE_A A
WHERE A.col1 = 10 AND A.col2 = 20 AND A.col3 = 30

它使用唯一索引。

我也试过使用IN,但IN查询中也没有使用索引。有没有办法在这种连接查询中使用这个唯一索引?如果没有,你能指点我另一种方法来提高这个查询的速度吗?感谢。

1 个答案:

答案 0 :(得分:0)

TABLE_A上,仅创建一个带col1的索引(用于连接)和另一个仅带col2col3的索引(用于过滤谓词) )。

查询优化器会将JOIN和过滤视为两个单独的操作。它不会使用带有col1的索引作为过滤操作的第一列。

相关问题