如何优化PostgreSQL中连接来自另一个表的行数的SQL

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

我有以下表,其中id是记录的唯一标识符(但表D不能有它):

CREATE TABLE A (id int, a1 int, name text, a3 int);
INSERT INTO A VALUES (1, 100, 'Annie', 3);

CREATE TABLE B (id int, b1 int, b2 int);

CREATE TABLE C (id int, c1 int, c2 int);

CREATE TABLE D (d1 int, name text);
INSERT INTO D VALUES(2000, 'Annie');
INSERT INTO D VALUES(2050, 'Annie');

我需要从上面的表- b1、c2和count(d1)中找到与id=1的对象相关的信息。
id是查询的唯一已知信息(我们不知道它是关于“Annie”的,只知道它是关于一个id=1的对象)。我知道我可以做这样的事情:

SELECT A.id, A.name, B.b1, C.c2, dd.total
FROM A
LEFT JOIN B on A.id=B.id
LEFT JOIN C on A.id=C.id
LEFT JOIN (SELECT count(d1) total, name FROM D GROUP BY name) dd ON (dd.name = A.name)
WHERE A.id=1

我可以优化这个SQL吗?当表变得很大时,子查询SELECT count(d1) total, d2 FROM D GROUP BY d2不会大大降低查询的速度吗?

相关问题