performance - 如何高效地从两个表中选择数据?

标签 performance postgresql

我有两个表:A,B

Aprisoner_idprisoner_name 列。

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

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

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

然后我想知道我的prisoner_datas 的所有id。为此,我需要按 prisoner_name 列合并信息,因为这对两个表都是通用的

我做了以下

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

但是它运行起来很慢。我怎样才能提高性能?

最佳答案

B 表中的 prisoner_name 连接列上添加索引。那么下面的连接应该会有一些性能提升:

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 不会有太大变化,但连接列上缺少索引在这里应该很重要。

关于performance - 如何高效地从两个表中选择数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43782260/

相关文章:

postgresql - Postgres : remove check constraint on varchar column

Postgresql 全文匹配意外

ruby-on-rails - Rails 从所有 Select * 类型查询中隐藏特定记录

memory - Scala 中的 BitSet 内存使用情况

Mysql:计数、分组但返回所有结果

sql - sqlite tune只读表

matlab - Matlab 2019 中的 3 维 IRR

performance - elasticsearch的索引性能不佳

postgresql - 如何强制合并连接?

postgresql - 我可以在 FOR 循环中使用 EXCEPTION 来强制继续出错吗?