最常見的是status應(yīng)用在task表中時(shí),抓取數(shù)據(jù)時(shí),sql如下:
SELECT *
FROM
task
WHERE
valid = 1
and runCount < 5
and opStatus = 1
where條件中runCount變化是最頻繁的,跑一次就要+1.
opStatus最常用的就1(未處理)-->2(鎖定)-->3(成功).而且數(shù)據(jù)分布中1是數(shù)據(jù)量最少的數(shù)據(jù)集,大部分?jǐn)?shù)據(jù)在3這個(gè)狀態(tài)。
取決于你查詢和修改的特性(劃重點(diǎn)),
如果1和非1差不多數(shù)量,加索引并不能有效優(yōu)化。
如果1很少非1很多,而你只查詢1,那么索引是有效的。但是增加和修改的索引效率會降低,如果修改操作出現(xiàn)了瓶頸那么應(yīng)該去掉索引。
按照推論,繼續(xù)驗(yàn)證,現(xiàn)場實(shí)例:
rows:426617
不加opStatus索引時(shí)耗時(shí)在300ms,如下:

image.png
加完索引,后耗時(shí)在5ms。
同時(shí)觀察insert和update耗時(shí)也正常。