首页 > 解决方案 > 使 Postgres 查询更快

问题描述

关于哪个查询会更快(或没有区别)的任何意见,为什么?

select * from A a left join B b on a.id = b.cid where b.cl1 = 's1' or b.c1 ='s2' or b.c1 ='s3' ;

或者

select * from A a left join B b  on a.id = b.cid where b.cl1 in ('s1','s2','s3');

以上只是提供有关我正在尝试做什么的想法的示例。可能不是确切的语法。

问这个问题的原因是,我建立了一个类似于第一个的 spring-hibernate-JPA 查询,此时性能很差。因此,寻找所有可能的方法来提高性能。它可能是也可能不是查询。但不是数据库方面的专家,正在寻找信息

标签: postgresql

解决方案


在这种情况下,您可以使用PostgreSQL query analize简单地分析您的查询,看看哪个是速度。

更新:正如@MatBailie 在他的评论中所说,LEFT JOIN 需要一个 ON 子句。

EXPLAIN ANALYSE
SELECT *
FROM A a
         LEFT JOIN B ON b
WHERE b.cl1 = 's1'
   OR b.c2 = 's2'
   OR b.c3 = 's3';

EXPLAIN ANALYSE
SELECT *
FROM A a
         LEFT JOIN B ON b
WHERE b.cl1 IN ('s1', 's2', 's3');

推荐阅读