PostgreSQL -使用多个表选择优化查询

ubbxdtey  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(183)

根据外键关系编写以下多选查询的最优化方法是什么?

SELECT
    a.id AS account,
    (SELECT COUNT(*) FROM b WHERE b.a_id = a.id) AS b_count, 
    (SELECT COUNT(*) FROM c WHERE c.a_id = a.id) AS c_count,
    (SELECT COUNT(*) FROM d WHERE d.a_id = a.id) AS d_count
FROM
    a

查询结果应如下所示;

account| b_count | c_count | d_count  |
---------------------------------------
1      | 3325    | 5004    | 8002     |
---------------------------------------
2      | 52353   | 3009    | 1202     |

为了透明,用于查询的行体积将大致为;

table a: 1,200 rows 
table b: 500,000 rows
table c: 600,000 rows
table d: 300,000 rows
tyky79it

tyky79it1#

试试这个,我猜表演会更好。
也许优化器本身会对您的请求进行这样的转换。
如果你有表b,c,d的index(a_id)-会更好。

select a.id
   ,coalesce(b_count,0)b_count
   ,coalesce(c_count,0)c_count
   ,coalesce(d_count,0)d_count
from a
left join( select a_id,count(*) b_count from b group by b.a_id)b on b.a_id=a.id
left join( select a_id,count(*) c_count from c group by c.a_id)c on c.a_id=a.id
left join( select a_id,count(*) d_count from d group by d.a_id)d on d.a_id=a.id

如果您展示不同查询的性能比较,那将是很有趣的。你有足够多的数据来测试。

相关问题