我的表:
索引:r2(VAL),r1(a),r1(b)
我的目标:从 R1 获取所有记录,其中 a 或 b 等于 R2 中的 VAL
我想了两个选项:
select * from R1 where R1.a in (select VAL from R2) or R1.b in (select VAL from R2);
要么
select * from R1 where exists (select * from R2 where R1.a = R2.VAL or R1.b = R2.VAL);
在我的具体情况下:
我想知道是否可以以更好的方式重写查询以获得性能。顺便说一句,我正在使用 pg 9.6
谢谢..
在这种特定情况下,我在主要评论中建议的第一个查询似乎提供了最佳性能:
select * from R1 where R1.a in (select VAL from R2) or R1.b in (select VAL from R2);
如果有人想看看,@klin 准备了一个包含所有执行计划的 dbfiddle:https ://dbfiddle.uk/?rdbms=postgres_9.5&fiddle=5b50f605262e406c0bab13710ec121d5
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句