我有一个查询,用于使用 2 个最近的读数来确定仪表数据时间戳之间的间隔:
$interval_query = sprintf("SELECT `stamp`
FROM `processed_gauge_data`
WHERE `processed_gauge_data`.`gauge_id` IN (%s)
ORDER BY `processed_gauge_data`.`stamp` DESC LIMIT 2;",
$gauge_id
);
这是一张带有 EXPLAIN 结果以及表结构的图片: http://i.imgur.com/QJmHmeb.png?1
这对大多数仪表都适用,但有 2 个特别需要 30-45 秒来执行此查询。选择这 2 个仪表的所有数据只需不到一秒钟的时间。是什么原因造成的?我不明白这是怎么回事。
最佳答案
原来是因为 ORDER BY processed_gauge_data
.stamp
DESC。我将查询更改为 ORDER BY 'id',它从 30-45 秒变为 .0006-.0003 秒:
$interval_query = sprintf("SELECT `stamp`, 'id'
FROM `processed_gauge_data`
WHERE `processed_gauge_data`.`gauge_id` IN (%s)
ORDER BY `processed_gauge_data`.`id` DESC LIMIT 2;",
$gauge_id
);
关于mysql - 简单的 SQL 查询需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32230774/