我有一个查询,用于确定使用最近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秒才能执行此查询。选择这两个仪表的所有数据只需不到一秒钟。是什么造成的?我不明白发生了什么。
答案 0 :(得分:1)
原来是因为 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
);