最常见的是status应用在task表中时,抓取数据时,sql如下:
SELECT *
FROM
task
WHERE
valid = 1
and runCount < 5
and opStatus = 1
where条件中runCount变化是最频繁的,跑一次就要+1.
opStatus最常用的就1(未处理)-->2(锁定)-->3(成功).而且数据分布中1是数据量最少的数据集,大部分数据在3这个状态。
取决于你查询和修改的特性(划重点),
如果1和非1差不多数量,加索引并不能有效优化。
如果1很少非1很多,而你只查询1,那么索引是有效的。但是增加和修改的索引效率会降低,如果修改操作出现了瓶颈那么应该去掉索引。
按照推论,继续验证,现场实例:
rows:426617
不加opStatus索引时耗时在300ms,如下:

image.png
加完索引,后耗时在5ms。
同时观察insert和update耗时也正常。