直接上结论:
mql查询语句的where条件字段和select查询字段需要在同一个索引中。
引申:
多表查询时,where条件涉及的大表字段、select中的大表字段和left join的大表字段要在同一个索引中。
首先声明,本人才学疏漏,本文即兴写作,不一定对,更不一定深。
我们项目使用mysql作为数据库,在单表达到百万级别以后,经常发现大表查询速度难以忍受,达到半分钟到5分钟左右。尝试在大表添加了索引,查询速度依然没有提升。
后测试发现,索引添加和查询配合才能出效果。
表结构t1:
id, name, time
sql1:
select * from t1 where time > t1 and time < t2;
无索引时,查询速度在几分钟。
添加time字段索引,查询时间依然是几分钟。
添加time索引,sql1编程sql2:
select time from t1 where time > t1 and time < t2;
执行sql2,查询时间是秒级别。