“只有 5 个状态,只查某个状态的全部数据时很慢” 你的意思是每个状态平均 60 万行数,然后你要一次取出这么多的数据? 慢是当然的,mysql 的优化器要么走全表扫,要么走索引然后来 60 万次(准)随机 IO ,都会慢 你真有这种业务需求,要么上 redis ,要么按这个状态字段建分区表,前者当然更好,后者如果你用的 ssd 性能也够用,硬盘的话,看你这 60 万行数到底占多大空间了
5 个字段,区分度并不高啊。散列散列,所以还是没懂散的意思啊。 我猜你是不是 select * from xxx where status = 'xxx' 查询的,要不先改成 select * from xxx where id in(select id from xxx where status = 'xxxx')?