mysql - 嵌套查询性能

标签 mysql

我有两个疑问如下。第一个有一个嵌套选择。第二个使用 group by 子句。

select
  posts.*,
  (select count(*) from comments where comments.post_id = posts.id and comments.is_approved = 1) as comments_count
from
  posts 

select
  posts.*,
  count(comments.id) comments_count
from
  posts

  left join comments on
     comments.post_id = posts.id 
group by
  posts.*

根据我的理解,第一个查询更糟糕,因为它必须对帖子中的每条记录进行选择,而第二个查询则不需要。

这是真的还是假的?

最佳答案

与所有性能问题一样,您应该使用数据测试系统的性能。

但是,我希望第一个在正确的索引下表现更好。正确的索引:

select p.*,
       (select count(*)
        from comments c
        where c.post_id = p.id and c.is_approved = 1
       ) as comments_count
from posts p

评论(post_id,is_approved)

MySQL 通过执行文件排序来实现group by。该版本保存了所有数据的文件排序。我的猜测是这会比第二种方法更快。

请注意:group by posts.* 不是有效的语法。我认为这只是为了说明目的。

关于mysql - 嵌套查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271811/

相关文章:

mysql - Entity Framework 6.0 启用 MySQL 和自动迁移错误 :- RenameIndexOperation exception

mysql - 程序属于什么?

php - 使用 PHP 和 mysql 优化将旧数据传输到历史表

mysql - 计算每个单元格与下一个单元格的日期差异

MySQL 表引擎

php - NULL 作为 codeignitier 事件记录选择中的列?

php - PDO 准备好的语句和 "LIKE"出现问题

mysql复制跳过语句。可能吗?

mysql - 错误-在 phpmyadmin 中导入 .sql 文件时

mysql - 如何从 shell 脚本自动登录 MySQL?