如何有效地从两个表中选择数据?

时间:2017-05-04 11:57:05

标签: performance postgresql

我有两张桌子:A, B

Aprisoner_idprisoner_name列。

B包含关于囚犯的所有其他信息prisoner_name列。

首先,我从B中选择所需的所有数据:

WITH prisoner_datas AS
(SELECT prisoner_name, ... FROM B WHERE ...)

然后我想知道id的所有prisoner_datas。为此,我需要按prisoner_name列组合信息,因为这两个表都很常见

我做了以下

SELECT A.prisoner_id, prisoner_datas.prisoner_name, prisoner_datas. ...,
FROM A, prisoner_datas
WHERE A.prisoner_name = prisoner_datas.prisoner_name

但它的效果很慢。如何提高绩效?

1 个答案:

答案 0 :(得分:1)

prisoner_name表的B加入列中添加索引。然后,以下连接应该有一些性能改进:

SELECT
    A.prisoner_id,
    B.prisoner_name,
    B.prisoner_datas.id      -- and other columns if needed
FROM A
INNER JOIN B
    ON A.prisoner_name = B.prisoner_name

请注意,我在这里使用了显式连接语法。它不是必需的,查询计划可能不会更改,但它使查询更容易阅读。我认为CTE不会有太大变化,但是在这里缺少连接列的索引应该很重要。