mysql使用order by desc倒序查询慢
数据表结构,该表数据量有3千万+,每天几万的速度在增加。
id自增,device_id,lng,lat,speed,mile,direct,create_time
索引字段:device_id,create_time
需求:查询某时间段内设备的里程数。
初级写法
1、找到最小的公里数,SQL语句:select mile from device_gps where create_time>开始时间戳 order by id limit 1;
2、找到最大的公里数,SQL语句:select mile from device_gps where create_time<结束时间戳 order by id desc limit 1;
结果语句1运行很快,语句2即使只查询1条数据,还是花了6秒左右。用explain查看,走的也是ID主键索引,貌似没用还是慢,跟PHPMYADMIN的翻页效率一样。
语句2改进写法,未超过1秒,接受了。
select mile from device_gps where create_time<结束时间戳 order by create_time desc limit 1;
网上大佬的解释:使用order by 后需跟WHERE条件的索引一致
老油条写法
一条SQL语句
select min(mile) as min_mile,max(mile) as max_mile from device_gps where create_time>开始时间戳 and create_time<结束时间戳