MySQL单表设2个全文索引加1个普通索引属于不良设计吗?
单表多索引合理性判断
你当前的4个索引完全不属于不良设计。索引的合理性核心判断标准是是否匹配实际业务查询、是否存在冗余,和数量没有直接关系:
- 主键索引是表结构必备的默认索引,无冗余问题
product_category和title的两个全文索引分别对应分类检索、标题搜索两个独立的业务场景,全文索引无法互相替代,也无法用普通B+树索引替换,属于必要索引price普通索引对应价格排序/价格范围过滤的查询需求,只要业务确实存在这类查询就是合理的
只要不存在同字段重复建同类型索引、建完从来没有查询使用的无效索引,电商产品表10个以内的业务索引都属于正常范围。
500万行数据量级下多索引的性能影响
多索引本身不会直接引发严重性能问题,影响只分读写两个场景:
- 读性能:不会有负面影响,反而会大幅提升对应场景的查询效率。500万行属于关系型数据库的常规中小数据量级,只要查询能命中对应索引,哪怕是全文检索也能做到毫秒级返回,多索引不会拖慢读请求。
- 写性能:会产生可预估的小幅开销,普通业务场景下完全可忽略。每次新增/修改/删除产品数据时,需要同步更新4个索引的结构,单条写操作的额外开销一般在几毫秒级别,只要写QPS低于1000,这个开销基本感知不到。
唯一需要调整的场景是你的业务属于写远多于读的特殊情况,比如每日新增/修改产品超过10万条、同时读请求占比极低,才需要考虑精简索引。日常运营中可以定期用EXPLAIN命令校验查询是否命中对应索引,避免出现无效索引浪费资源。
内容的提问来源于stack exchange,提问作者MoBal
相关产品推荐
相关产品推荐

