Oracle为什么没有运用索引场景ITeye - 娱乐之横扫全球

Oracle为什么没有运用索引场景ITeye

2019年03月14日15时07分25秒 | 作者: 向松 | 标签: 索引,运用,场景 | 浏览: 645

      场景1:

      假定有一个表T,在T(x,y)上有一个索引。假定咱们做一个查询:select * from t where y=5。此刻优化器不会运用索引,由于查询条件中不包括索引最前列(x列)。假定运用索引,或许有必要检查每一个索引条目,由于索引键或许是这样摆放的:1,2 1,3 1,4 1,5 2,1 2,4 2,6 3,1......咱们不知道y=5会在哪个当地呈现。可是假定x的取值较少,只要几个,那么会运用索引的。由于索引先是按x排序,后按y排序。假定x可取值很少,那么只需要依据x取值分红几个区间,然后逐一区间依据y值跳动扫描即可。

      总归,假定你的索引是树立在多列上,假定查询条件中不包括最前列,那么索引大部分状况会无效。

 

      场景2:

      履行一个计算查询:select count(*) from t,表T上有一个B*树索引,可是查询优化器履行的是全表扫描,而非根据索引扫描。原因或许是,索引树立在答应空的列上,由于B*树索引对完全为null的行不会树立索引,就会漏掉一部分数据。假定依照索引扫描,就会漏掉一部分数据,因而查询优化器履行全表扫描是正确的挑选。

 

      场景3:

      假定表中某一列只包括数字(在该列树立了索引),可是它界说的是字符串。将这一列作为条件进行查询原本该这样写:select * from t where indexed_column = 5。假定咱们这样写:select * from t where indexed_column = 5 就不会运用索引。由于会隐含地将SQL转换成:select * from t where to_number(indexed_column) = 5。因而就不会履行索引了,除非树立一个根据to_number函数的索引。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表娱乐之横扫全球立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章