mysql - 简单的 SQL 查询需要很长时间

标签 mysql

我有一个查询,用于使用 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/

相关文章:

mysql - React Express Heroku 503 POST 路由错误

php - 如何知道 Solr 搜索在 Magento CE 中的工作原理

php - 内部加入 symfony2 的最佳方式

mysql - 如何在具有特定别名的表上正确选择 MySql 函数值?

php - SQLSTATE[HY000] : General error: 1364 Field 'contactId' doesn't have a default value

sql - 获取 MySQL 更新语句中受影响的行数?

MySQL - 连接 View 和表

mysql - Rails 2.3.3 - 设置为生产模式

MySQL 查询 - 获取未插入的 ID 以将新行插入表中

MYSQL - 左连接双重关系?