mysql 多表联查 一对多数据量大的情况下效率低下

首先  索引命中,一条线路对应经纬度接近四五百条数据,这样查询出来效率特别低下

把b表放到最后的原因是,测试其他的几张表,速度都比较快,就只有这一个表加上后速度60秒

 

 

多数情况,可以不用数据库的连表查询,用代码进行单表查询后再聚合,对数据查询结果实时性要求不高的话,可以根据查询效率情况加主动缓存或者被动缓存。另外经纬度可以用mysql的geometry类型

可以做几个简单的优化检查,再看看效果。

  1. 表的设计上,尽量消除 left join, left join 比 inner join慢
  2. 检查下你的表的索引是否做了,b 表的 id 和被查询的字段可以做成一个联合索引,规避回表查询。
  3. 只查询必要的字段,不必 a.* 全查出来。
  4. 是否有其他过滤条件,功能上需要全查出来?