左连接需要花费大量的时间

问题描述 投票:0回答:1

我需要您对以下查询性能问题的建议。

select a.id
from table A
left join table B
on B.id = A.id
left join table B1
on B1.second_id = A.id;

这里表A具有10万条记录。但是表B的数据量为145GB。 [表B和B1相同,但必须用两个不同的列联接]

如果我使用一个左连接执行查询,如下所示,

select a.id from table A left join table B on B.id = A.id

更快地获取数据。但是,当我使用两次LEFT JOIN时,查询需要30分钟才能查询记录。

获得相应列上的索引。其他可减少执行时间的性能建议。

感谢和问候,Thiru.M

postgresql postgresql-9.1 postgresql-9.4 postgresql-9.2
1个回答
0
投票

我怀疑

  • B1.second_id都没有索引

  • B1.second_id不是唯一的(或主键)

  • B1.second_id是多列索引的一部分,其中不是索引的第一列

如果在该列上有索引,则也可以尝试将索引移到其他卷,以免与主要数据检索发生争用。

对查询运行EXPLAIN来验证正在使用索引,而不是退回到145GB卷上的顺序扫描。

您也没有提到数据库有多少可用RAM。如果您的设置与查询结合在一起会导致系统交换,那么性能也会急剧下降。

© www.soinside.com 2019 - 2024. All rights reserved.