mysql - 如何使用order by优化mysql group by

标签 mysql sql group-by sql-order-by

我目前在使用 group by 和 order by 时遇到查询速度极慢的情况。我倾向于不使用索引,因为 group by 位于单独的列上,然后 order by

sqlFiddle

Foo 表结构

id -> pk (indexed)
bar_id -> foreign key (indexed)
data -> varchar 
created_at -> timestamp (indexed)

这是查询:

SELECT * FROM foo GROUP BY bar_id ORDER BY created_at DESC

我基本上试图获取每个 bar_id 的最新记录。然而,这最多需要 11 秒才能完成。有没有更好的方法来执行此类查询?

最佳答案

SELECT COUNT(*) FROM foo;
+----------+
| COUNT(*) |
+----------+
|    98304 |
+----------+
1 row in set (0.03 sec)

SELECT x.* 
  FROM foo x
  JOIN
     ( SELECT bar_id
            , MAX(created_at) max_created_at 
         FROM foo
        GROUP
           BY bar_id
     ) y
    ON y.bar_id = x.bar_id 
   AND y.max_created_at = x.created_at;

531 rows in set (0.01 sec)

注意:我稍微修改了您的架构。 http://sqlfiddle.com/#!2/a6296/2

关于mysql - 如何使用order by优化mysql group by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24391026/

相关文章:

mysql - 不再运行的 mysql 数据库的备份

php - 无法播放使用 XAMPP 下载的超过 700mb 的视频文件

MySQL从不同的表复制列,插入到表的顶部

mysql - 通过脚本为 Drupal 6 安装创建 MySQL 数据库

c# - 如何获得更新记录数的计数(*)

sql - 获取SqlException,超时错误

python - 在 SQLAlchemy 中手动构建 SQL 查询时如何正确转义字符串?

sql - 查找所有共同作者 - 多对多映射表的分面/分组

c# - Linq 选择分组依据

python - 在 pandas groupby 操作中计算唯一元素并总结值