1
incompatible 2017-04-09 13:50:43 +08:00 via iPhone
你这个需求还是从应用层面优化吧。
建一个 latest_gps 表,存每辆车的最新一条的 gps 数据,车辆上报了最新的 gps 后更新此表。 查询时 select from 此表不用加任何 where 条件即可。 |
2
ivvei 2017-04-09 17:11:02 +08:00
不要把 select top 那句写到 外面这句的 select 部分。你放到后面去,做 join 都比现在这样强。
说到, SQL 优化,先看执行计划。 |
3
rqrq 2017-04-09 18:13:23 +08:00
select * from gps_car a inner join (select max(gps.自增字段), gps.cid from gps inner join gps_car on gps.cid = gps_car.cid group by gps.cid) b on a.cid = b.cid
不过这样写, join 子查询用不了索引。 |
4
ebony0319 2017-04-09 18:21:57 +08:00 via Android
没有一个静态表记录最后的 gps 位置要搞死人的,不管怎么写都要去扫描那个表。
|
5
mko0okmko0 2017-04-10 12:53:06 +08:00
补充楼上大家的东西:
建议 mongodb(ram db 一类)+传统资料库 mongodb 存放最后位置,甚至还可以设计局部经纬度聚合,用于查询某区域有多少人,或区域热点,或快查此区域每个人的位置, 传统资料库就一直存入每个人的位置,不做查询或是把查询设计到 mongodb 上. 速度差的不是一个等级,是好几个等级 @@ |