问题现象
租户开启向量化 alter system set _rowsets_enabled = false tenant=oracle; SQL 通过函数索引过滤数据时结果错误。
复现步骤如下:
创建表
create table t_sum(c1 int ,C2 VARCHAR2(20),row_code varchar2(20));初始化数据
insert into t_sum values(1,1,'R30'),(2,2,'R100'),(3,3,'R80'); COMMIT;创建函数索引
CREATE INDEX IDX_T_SUM ON t_sum(SUBSTR(ROW_CODE,2));使用函数索引查询,查询结果为空,应该是 3 行数据,删除函数索引后可以返回正常
SELECT /*+ index(T_SUM IDX_T_SUM) */ ROW_CODE FROM T_SUM WHERE SUBSTR(ROW_CODE,2)>20;
问题原因
由于 V3.2.x 版本索引回表场景不支持向量化,我们使用向量化算子和非向量化算子混跑的方式来支持更多场景的向量化功能开启,该功能仅影响 V3.2.4 版本。本次问题出现的点就是在向量化混跑场景下,函数索引表达式填值时计算标识维护不一致导致。
注意
OceanBase 数据库 4.x 版本开始稳定支持向量化,并默认开启。V3.2.x 版本生产环境不建议开启向量化。
问题的风险及影响
函数索引查询的结果错误,出现正确性问题。
影响版本
OceanBase 数据库 V3.2.4 版本。
解决方法及规避方式
- 解决方式:关闭向量化。
- 规避方法:禁用/删除函数索引。