如果查询顺序错误,Oracle不使用索引



我曾试图找到类似的问题,但没有找到它。如果是重复的,请指出正确的题目。

Oracle version 19 Standard Edition 2, version 19.3.

我预订了一张桌子。部分栏目:

tbody> <<tr>
COLUMN_NAME DATA_TYPE NULLABLE
ID数量(38岁,0)没有
CLASSID数量(5,0)
PARENTFOREIGNKEY数量(38岁,0)
BOOKINGNO数量(4 0)

搜索谓词中列的顺序需要与索引中列的顺序匹配。选自《如何在Oracle数据库中创建和使用索引》:

Oracle数据库读取从最左边开始的索引(" first ")列。然后是第二个,第三个,等等。如果你有一个指数:

create index i on tab ( col1, col2, col3 ); 

where子句是:

where col3 = 'value' 

要使用索引,数据库要么必须遍历col1和col2中的所有值。或者,更有可能的是,阅读找到那些符合你条件的人。

在您的例子中,问题是索引中的第三列。如果索引只在classidparentforeignkey列上,那么谓词的顺序不会产生任何差异。通过将id列添加到索引中并更改谓词的顺序,优化器确定只需扫描整个表一次比使用索引更容易,因为索引必须扫描整个表两次。文章中有一些这样的例子,因为篇幅太长,在这里就不赘述了。

相关内容

  • 没有找到相关文章

最新更新