我有两张桌子:A, B
。
A
有prisoner_id
和prisoner_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
但它的效果很慢。如何提高绩效?
答案 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不会有太大变化,但是在这里缺少连接列的索引应该很重要。