我有一个第一个表和一个相关的第二个表,其中有一个指向第一个表的外键。
第二个表中的行数范围可以从零行到数百万或行(时间序列数据)。
当向最终用户显示第一个表的行时,我想显示第二个表中是否有相关的行-是或否,不多。
目前,我离开了表格并在第二张桌子上计数。但是我怀疑这只是确定第二张表中是否有相关行的一种缓慢且消耗资源的方式。
SELECT
first.id,
first.title,
Count( second.id ) as count
FROM
first
LEFT JOIN
second
ON
first.id = second.first_id
GROUP BY
first.id
ORDER BY
count DESC
在两个表上的主键中都有索引id
。数据库ist PostgrSQL。
什么是更快和/或更少的资源消耗方式?
我会用标量子选择而不是联接来做到这一点:
select f.*,
exists (select * from second s where s.first_id = f.id) as rows_in_second_exists
from first
exists
一旦发现行,操作员将停止查看第二张表。索引打开second (first_id)
将加快速度。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句