Sql 一个表上ID和另一个表中所有元素出现的最佳方法
嗯,我需要的查询很简单,可能是另一个问题,但我需要的是性能,所以: 我有一个10.000行的用户表,该表包含id、电子邮件和更多数据 在另一个名为orders的表中,我有更多的行,可能是150.000行 在这个订单中我有下订单的用户的id,还有订单的状态。状态可以是0到9(或空)之间的数字 我的最终要求是让每个用户都具有id、电子邮件、其他列以及状态为3或7的订单数量。它不关心其3或7,我只需要数量 但我需要以一种低影响的方式(或性能方式)执行此查询 最好的方法是什么Sql 一个表上ID和另一个表中所有元素出现的最佳方法,sql,postgresql,redash,Sql,Postgresql,Redash,嗯,我需要的查询很简单,可能是另一个问题,但我需要的是性能,所以: 我有一个10.000行的用户表,该表包含id、电子邮件和更多数据 在另一个名为orders的表中,我有更多的行,可能是150.000行 在这个订单中我有下订单的用户的id,还有订单的状态。状态可以是0到9(或空)之间的数字 我的最终要求是让每个用户都具有id、电子邮件、其他列以及状态为3或7的订单数量。它不关心其3或7,我只需要数量 但我需要以一种低影响的方式(或性能方式)执行此查询 最好的方法是什么 我需要在postgres
我需要在postgres 10的redash中运行此操作。这听起来像是一个
加入和分组:
select u.*, count(*)
from users u join
orders o
on o.user_id = u.user_id
where o.status in (3, 7)
group by u.user_id;
Postgres在优化这些查询方面通常做得很好——上面假设用户(user_id)
是主键——因此这应该可以很好地工作。这听起来像是一个加入和分组依据:
select u.*, count(*)
from users u join
orders o
on o.user_id = u.user_id
where o.status in (3, 7)
group by u.user_id;
Postgres通常在优化这些查询方面做得很好——上面假设users(user\u id)
是主键——因此这应该可以很好地工作。如果o.status in(3,7)
按原样移动到join
子句中,或者扩展到(o.status==3或o.status==7)
?有没有一种方法可以预测没有解释-分析
,哪一种更快?这将是相同的,从性能角度来看。Postgres足够聪明,可以将所有这些视为等价的。如果我想将其排除在外,我的意思是当我想要那些不是status 3的人时,该怎么办如果将(3,7)
中的o.status按原样移动到join
子句中,或者扩展到(o.status==3或o.status==7),会更快吗
?有没有一种方法可以预测哪一种更快,而无需解释和分析
?它将是相同的,从性能角度来看。Postgres足够聪明,可以将所有这些都视为等价的。如果我想将其排除在外,我的意思是当我想要那些不是状态3的人时,情况会怎样