在pg库使用中,写查询语句免不了碰到很多 in(x,xx,xxx,xxxx,..,..) 这种情况,有时候里面的参数可能会很多,这样就会使得查询效率降低很多。基于上述情况为了提升查询效率可以考虑替换掉 in()。
通过表关联来替换 in():
场景一:下面是aa,bb两张表的原始关联关系
SELECT * FROM aa WHERE abc IN (SELECT hh FROM bb);
考虑替换为
SELECT * FROM aa INNER JOIN (SELECT hh FROM bb) cc ON abc = cc.hh
场景二:传参进来的
SELECT * FROM aa WHERE abc IN ('E','F');
考虑替换为 (注意:regexp_split_to_table('E,F', ',') 中的分割符号随意,此处的分割符号是“,”)
SELECT
*
FROM
aa
INNER JOIN (
SELECT
regexp_split_to_table('E,F', ',') AS ids
) bb ON abc = bb.ids
上述转换其实就是将 in(x,xx,xxx,xxxx,..,..) 中的诸多参数 转换为 拥有单独一列的表 来做表关联 查询,这样查询效率相对in 可能会有所提升。
上述只是陈述了pg库中 in 的一种替换方式,仅供各位参考,不保证查询效率一定能有明显的提升。