这是我的表结构 里面有一亿条数据
创建索引之前 我用sfzhm作为过滤条件 花了40秒
我用字段xm sfzhm 创建了一个索引
创建完索引之后 我用sfzhm作为过滤条件 花了3分钟
请问为什么创建索引之后查询速度反而变慢了?
麻烦把建表语句和查询的sql发出来看一下
索引是怎么创建的,执行下
explain extended select * from dwm_034_srkjcxx_o_f where sfzhm=‘77777777777’;
看下执行计划
哦哦,我看出来了,你这是创建了一个xm,sfzhm的联合索引,查询的时候只用了sfzhm的字段,这样是用不到索引的,建议你再创建一个sfzhm字段的单独索引
1 个赞
组合索引的第一个列应该是高基数列,建议把列的顺序改下试试,(sfzhm,xm)
用不上索引应该不会慢,方便的时候可以把建索引前和建索引后的执行计划
索引和mysql一样,最左前缀法则,你的联合索引,查询条件在索引的第二个字段上,最左确是xm,走不到索引上。
评估一下SQL查询条件,都是有sfzhm,那么吧sfzhm放在索引第一个字段上。如果sfzhm,xm都会有,并且是两个字段不会全部同时出现,那就只能在创建一个索引了