oracle不等于怎么走索引,oracle为什么不走索引

ename from tb2 where

empno=7934;--还是不走index

真不懂了,难道只是因为我的优化器是CBO吗?

或者是因为统计信息没有刷新吗?

或者莫非是因为我的表因为是翻起来的,里面的重复值比较多?(这个可能性非常大)

借网上文章看看后,还是不知原因,文章如下

oracle 优化器

不走索引原因

SQL优化器简介

基于规则的优化器

。总是使用索引

。总是从驱动表开始(from子句最右边的表)

。只有在不可避免的情况下,才使用全表扫描

。任何索引都可以

基于成本的优化器

。需要表、索引的统计资料

Analyze table customer compute statistics;

Analyze table customer estimate statistics sample 5000 rows;

。表中设置并行度、表分区

优化器模式

rule模式

。总忽略CBO和统计信息而基于规则

choose模式

。Oracle根据情况选择rule or first_rows or all_rows

first_rows 模式

。基于成本,以最快的速度返回记录,会造成总体查询速度的下降或消耗更多的资源,倾向索引扫描,适合OLTP系统

all_rows模式

。基于成本,确保总体查询时间最短,倾向并行全表扫描

例如:

Select last_name from customer

你可能感兴趣的:(oracle不等于怎么走索引)