联合索引(a,b),颠覆你对MySQL 索引的印象
update_time 的选择性:1845933 / 1907609.to_f = 0.9676684268107353 接近1
publish_status 的选择性: 2 / 1907609.to_f = 1.0484328811617055e-06 接近0
不走寻常路,我就偏选择 选择性低的做索引的第一位。
创建索引
根据a 查询
平均查询时间:
理论上可以用到索引(a,b) 中的 a 部分。
根据b 查询
平均查询时间:
查询b 的时候,理论上用不到索引的。为啥这里???
根据(a,b) 查询
平均查询时间:
符合理论上的预期。
根据(b,a) 查询
平均查询时间:
理论上,这里只能用到(a,b)中的a部分,为啥也这么快??
结厅雹论:
1、理论上索引对顺序是敏感的,但是由于MySQL的查询优化器会自动调整where子句的条件顺序以使用适合的索引。
2、将选择性高的列放在索引的最前列。根据场景的不同腔蔽,这条经验法则并不是完全准确的。在某些场景下,可能需要根据运行频率最高的查询来扮圆帆调整索引列的顺序。
参考
http://www.programering.com/a/MTMwAzMwATM.html