首页 新闻 会员 周边

mysql查询优化

1
[待解决问题]

sql:

select * from user
where 
    a = '' 
and b = ''
and c = '';

字段a,b,c的值均为枚举值,这种情况可以添加a,b,c的联合索引吗?

xjint的主页 xjint | 菜鸟二级 | 园豆:209
提问于:2022-07-11 14:23
< >
分享
所有回答(2)
0

枚举的话,应该是就是固定的几个值(就像性别只有“男”,“女”一样),即使添加了联合索引,查询效率也提高不了多少,因为字段值的唯一性太差,就像性别一样,就两个值,MySQL优化器大概率会放弃走这个索引

飒沓流星 | 园豆:1099 (小虾三级) | 2022-07-11 15:53
0

看你场景的要求以及资源情况
1、三个字段都是枚举值,但枚举分布情况是怎么样的,如果某个枚举数据很少但查询场景很多,那肯定值的加索引
2、即使三个字段枚举值分布平均(就像性别且实际人员性别55分),可你这场景有3个字段,这种情况联合索引的效率是大于单个索引的,是可能会走到索引的(当然也有可能不走:当你那些枚举值数据占比很大的时候),可以以结果集占30%为考虑标准,如果基本上都大于那建议就不要加索引

看你的场景是否对查询效率要求很高,高的话即使有不走索引的可能也可以创建索引,当然也要承受创建索引消耗的资源以及对DML效率的影响(实际应该绝大部分项目不需要顾虑这些资源消耗问题)

韵小明 | 园豆:206 (菜鸟二级) | 2022-07-13 17:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册