我有两个表:A,B
。
A
有 prisoner_id
和 prisoner_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/