场景描述:
在一个表中获取某个站号所对应的最新数据,忽略其他要素,没有主键,查询字段没有单独设置索引。
测试单表数据量:14万+,远程数据库,mysql5.7,服务器windows server 2016数据中心版
都是远程所以带宽不作为影响要素
我们分别用两个sql来实现这个需求:
第一:子句查询
SELECT
*
FROM
cmiss_all_position_hours
WHERE
Station_Id_C = '站号'
AND Datetime = (
SELECT
MAX(Datetime)
FROM
cmiss_all_position_hours
WHERE
Station_Id_C = '站号'
);
第二:排序查询
SELECT
*
FROM
cmiss_all_position_hours
WHERE
Station_Id_C = '站号'
ORDER BY
Datetime DESC
LIMIT 1;
查询结果:
为了验证是否查询顺序有关,咱们换一下执行顺序:
调换顺序结果
从上就可以看出,这两个查询效率差别还挺大,该用怎么样的写法大家应该都清楚了,另外如果数据库做了查询缓存优化设置,在第一次查询的时候查询效率差距会比较大,后面查询条件不变的情况下,效率基本一致
做了数据库缓存后第二次查询效率如下:
除了第一次,后面基本没什么影响了(前提条件是查询内容没发生变化)