oceanbase建索引之后查询反而变慢了


这是我的表结构 里面有一亿条数据
创建索引之前 我用sfzhm作为过滤条件 花了40秒
我用字段xm sfzhm 创建了一个索引
创建完索引之后 我用sfzhm作为过滤条件 花了3分钟
请问为什么创建索引之后查询速度反而变慢了?

麻烦把建表语句和查询的sql发出来看一下


这是建表语句

这是sql语句
1682217778843

索引是怎么创建的,执行下
explain extended select * from dwm_034_srkjcxx_o_f where sfzhm=‘77777777777’;
看下执行计划


索引是通过可视化工具创建的

这是执行创建索引的语句
image

下面是执行计划


image

哦哦,我看出来了,你这是创建了一个xm,sfzhm的联合索引,查询的时候只用了sfzhm的字段,这样是用不到索引的,建议你再创建一个sfzhm字段的单独索引

1 个赞

组合索引的第一个列应该是高基数列,建议把列的顺序改下试试,(sfzhm,xm)

用不上索引应该不会慢,方便的时候可以把建索引前和建索引后的执行计划

索引和mysql一样,最左前缀法则,你的联合索引,查询条件在索引的第二个字段上,最左确是xm,走不到索引上。
评估一下SQL查询条件,都是有sfzhm,那么吧sfzhm放在索引第一个字段上。如果sfzhm,xm都会有,并且是两个字段不会全部同时出现,那就只能在创建一个索引了