今天遇到一个需求,需要找出最新的一条数据。然后我的Sql是这样的
SELECT
pm25,
pm10,
so2,
no2,
co,
o3,
MAX( insTime ) AS insTime
FROM
tb_weather_city_hour
WHERE
city = 'xxx'
但是看了一下表,有10w多条数据了,如果在10w条数据中用MAX函数应该很会慢,而且数据越来越多,有可能100w条。加索引的如果数据量太大也会慢吧。我想到解决办法是加上一个条件startTime和endTime 就是当日期的开始 也就是00:00:00~23:59:59 这个时间范围的数据就是最新的数据了。这样在MAX也不会很慢,如果考虑到可能当天内没有数据,开始时间可以向前推几天。
AND insTime BETWEEN #{startTime} AND #{endTime}
另外也可以不使用MAX,可以使用
ORDER BY insTime Limit 1
这样也可以找出最新的一条
这个只是个人的解决办法,如果好的解决办法可以传授一下。