我有关于(非)使用唯一索引的问题。我正在使用Oracle 11g。在连接中不使用唯一索引(覆盖3列)
表A: col1,col2,col3。 COL1-COL2-COL3三重峰具有在表A.
表B多列唯一索引: COLX。 COLX是B表的主键
我的查询是:“在TABLE_A每一行读”
SELECT * FROM TABLE_A A
JOIN TABLE_B B ON A.col1 = B.colX
WHERE A.col2 = 10 and A.col3 = 20
当我看着蟾蜍解释计划,我看到(完全访问)。
然而,当我写的查询:
SELECT * FROM TABLE_A A
WHERE A.col1 = 10 AND A.col2 = 20 AND A.col3 = 30
它采用了独特的指数。
我也尝试使用IN,但是在IN查询中也没有使用索引。有什么办法在这种连接查询中使用这个唯一索引?如果没有,你能否指点我另一种方法来提高查询的速度?谢谢。
http://en.wikipedia.org/wiki/Database_index#Column_order阅读关于'composite index'。 –
独特的索引定义可以帮助我们帮助你。我猜col2是在col3之前声明的,所以没有col2的查询被强制进入一个表扫描。如果您将更频繁地使用“查询”1,则应考虑对索引列进行重新排序。 – RubberDuck
如果第一列中的第一列与索引中的第一列相匹配,则将使用该索引(一般情况下)。如果您想在第一个查询中使用索引,请创建一个“索引(col2,col3)”。 – Mihai