以索引列为查询条件进行查询并用主键对结果进行排序,执行了全表扫描

【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】3.1.4-OceanBase CE
【问题描述】
有一数据量接近一亿的无分区表A,自增主键为b,联合索引列为c与d,执行如下sql:
Select * from A where c = 10000 order by b limit 1000;
表A中符合条件的数据量约为十万级,执行该sql时间超过1min
经检查执行计划,发现该sql实际执行了全表扫描
而将按主键排序去掉之后速度很快,检查执行计划走了联合索引

请问这种现象的原因是什么?是什么原理?联合索引为什么失效了?

【复现路径】
使用 Select /*+ INDEX(A c+d联合索引名) */ * from A where c = 10000 order by b limit 1000;
0.1s完成查询

【问题现象及影响】
看起来完全应该走索引列的查询却走了全表扫描

【附件】

麻烦打印一下执行计划贴一下


看起来是走了全表的排序

表结构方便贴一下吗?

这个不是走了索引了吗

把慢的那个计划发下,用explain extended

看起来是走了索引,但他似乎是先执行了全表排序再走的索引,如果用hint强制指定索引的话看起来就不会先走全表排序

把两个计划都贴出来就好了