今天尝试对一张MySQL表做查询优化, 500W数据
但是发现加了索引比不加索引使用全表扫描还慢, 上网查, 据说是因为需要回表, 因为没有用到 using index(覆盖索引), 而回表查询是随机读
1. 如果回表查询的数据是在磁盘, 随机读将会非常慢, 导致使用索引以后的查询速度是30s左右
2. 如果回表查询的数据实在内存, 则会比全表扫描快
我这里全表扫描的时间是3s
如果我将查询中所有的字段都加入索引, 则会使用覆盖索引(using index), 此时查询时间缩减为 0.5s
但是这样有个很大限制, 就是查询的字段必须全都在索引中, 否则不会使用覆盖索引, 并且, 索引将会变得非常大