我曾试图找到类似的问题,但没有找到它。如果是重复的,请指出正确的题目。
Oracle version 19 Standard Edition 2, version 19.3.
我预订了一张桌子。部分栏目:
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中的所有值。或者,更有可能的是,阅读找到那些符合你条件的人。
在您的例子中,问题是索引中的第三列。如果索引只在classid
和parentforeignkey
列上,那么谓词的顺序不会产生任何差异。通过将id
列添加到索引中并更改谓词的顺序,优化器确定只需扫描整个表一次比使用索引更容易,因为索引必须扫描整个表两次。文章中有一些这样的例子,因为篇幅太长,在这里就不赘述了。