对哪个查询更快(或没有区别)以及为什么有任何意见?
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 查询,此时性能很差。因此寻找所有可能的方法来提高性能。它可能是也可能不是查询。但不是DB方面的专家,找资料
答案 0 :(得分:1)
在这种情况下,您可以简单地使用 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');
答案 1 :(得分:1)
第二个查询总是更快,因为如果您在 b.cl1
上有索引,它可以使用单个索引扫描。
但是由于第一个查询在不同的列上有条件,所以查询有很大的不同,比较没有意义。