Oracle多字段索引的查询问题

时间:2021-11-05 15:11:17
有一张表A,主键A1,A2,索引是根据主键自动建立的主键索引。
我在查询的时候只加 where A1= XXX 非常慢,发现执行过程并没有走索引,全表扫描了。
如果where A1 =xxx AND A2=XXX 就走的索引,就很快,这什么情况呢。
必须跟索引中所有字段条件来查询才能走索引吗?

8 个解决方案

#1


列下主键索引的结构

#2


是不是建立的联合索引啊

#3


刚才跑去库里试了试,发现了问题所在,如果写的 >=,ORACLE就不走索引了,只写 = 就走的索引。
大于等于和等于看来被优化器区分开了。

#4


但是还有个问题,虽然等于条件有几千条数据,大于等于可能是10万左右的。
但是全表可是有百万级的,为什么ORACLE会选择全表扫描呢。

#5


引用 4 楼 eva_1st 的回复:
但是还有个问题,虽然等于条件有几千条数据,大于等于可能是10万左右的。
但是全表可是有百万级的,为什么ORACLE会选择全表扫描呢。


索引是适合在大量数据中选出少了数据速度才很快,如果返回的记录大于20%还是多少比例时oracle就不会走索引了。你可以参考一下我之前发过的一条帖子,和你的问题有点类似。
http://bbs.csdn.net/topics/391019419

#6


引用 4 楼 eva_1st 的回复:
但是还有个问题,虽然等于条件有几千条数据,大于等于可能是10万左右的。
但是全表可是有百万级的,为什么ORACLE会选择全表扫描呢。

你可以试试大于等于取少量的数据,看看会不会走索引。应该是能走的

#7


大表的话,百分之几就不会使用索引了,优化器计算结果是使用索引更慢。

#8


你这自动建的就是联合索引,必须保持一致使用,才有效。

#1


列下主键索引的结构

#2


是不是建立的联合索引啊

#3


刚才跑去库里试了试,发现了问题所在,如果写的 >=,ORACLE就不走索引了,只写 = 就走的索引。
大于等于和等于看来被优化器区分开了。

#4


但是还有个问题,虽然等于条件有几千条数据,大于等于可能是10万左右的。
但是全表可是有百万级的,为什么ORACLE会选择全表扫描呢。

#5


引用 4 楼 eva_1st 的回复:
但是还有个问题,虽然等于条件有几千条数据,大于等于可能是10万左右的。
但是全表可是有百万级的,为什么ORACLE会选择全表扫描呢。


索引是适合在大量数据中选出少了数据速度才很快,如果返回的记录大于20%还是多少比例时oracle就不会走索引了。你可以参考一下我之前发过的一条帖子,和你的问题有点类似。
http://bbs.csdn.net/topics/391019419

#6


引用 4 楼 eva_1st 的回复:
但是还有个问题,虽然等于条件有几千条数据,大于等于可能是10万左右的。
但是全表可是有百万级的,为什么ORACLE会选择全表扫描呢。

你可以试试大于等于取少量的数据,看看会不会走索引。应该是能走的

#7


大表的话,百分之几就不会使用索引了,优化器计算结果是使用索引更慢。

#8


你这自动建的就是联合索引,必须保持一致使用,才有效。