mysql - 为什么组合计数查询执行时间太长?

标签 mysql

服务器不会对此查询进行字节处理,执行时间太长:

select prodavac.id, count(artikl.id) as brojartikala, count(poruceno.id) as brojporudzbina from prod_prodavac prodavac 
inner join prod_artikl artikl 
    on prodavac.id=artikl.prodavacid 
inner join prod_poruceno poruceno 
    on prodavac.id=poruceno.prodavacid 
group by prodavac.id 

另一方面,两个半查询都运行得非常快:

select prodavac.id, count(artikl.id) as brojartikala from prod_prodavac prodavac 
inner join prod_artikl artikl 
    on prodavac.id=artikl.prodavacid 
group by prodavac.id 

还有另一个:

select prodavac.id, count(poruceno.id) as brojporudzbina from prod_prodavac prodavac 
inner join prod_poruceno poruceno 
    on prodavac.id=poruceno.prodavacid 
group by prodavac.id 
order by prodavac.id asc 

我真的很想在一个查询中完成它,那么如何正确地合并它们呢?所有 ID 都是索引整数。

解释选择显示:

enter image description here

最佳答案

根据表和数据之间的关系,您的组合查询甚至可能不会返回所需的结果。对于简单的关系计数,您可以在 SELECT 子句中使用相关子查询:

select prodavac.id, (
    select count(*)
    from prod_artikl artikl 
    where artikl.prodavacid = prodavac.id
  ) as brojartikala, (
    select count(*)
    from prod_poruceno poruceno 
    where poruceno.prodavacid = prodavac.id
  ) as brojporudzbina
from prod_prodavac prodavac
order by prodavac.id asc

关于mysql - 为什么组合计数查询执行时间太长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59335054/

相关文章:

Mysql 根据另一个表中的字符串更新列

c# - 在 Visual Studio 中处理 MySQL 异常

php - MySQL 查询对 GROUP BY 中的结果进行排序

MySQL:如何在左连接中使用列别名?

php - 包括相关表中的单个项目

mysql - Cakephp 模型关联及其所需的 mysql 查询量

MySQL AVG TIME 给出奇怪的行为

php - 将文本匹配到一行

php - Laravel:从数据库中删除时如何处理依赖关系

mysql - Fresh Lucee 5.2.7.63 安装无法连接到全新 MySQL 8 安装