postgresql关于in和exists使用

Posted 月图灵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postgresql关于in和exists使用相关的知识,希望对你有一定的参考价值。

1.当父查询结果集小于子查询结果集则选择exists,如果父查询结果集大于子查询结果集选择in。(可尝试等价改写)
in和exists都有子查询优化,提升子查询,有时候这两的执行计划一样。需要注意的是如果子查询包含了父查询里面的条件,in不会被优化。

2.in里面的值一般不超过100个
3.单表abase的in和个数关系不大,都可以走索引。
4.当有连表并且有in的个数很多,count的时候需要解析这些值很慢,所以可以封装成any valuse的形式来求count,而分页还是使用in。此例主要是in和any(values)的等价改写
any values:c_bh=any(values(\'53\'),(\'530001\'),(\'530002\'),...)

abase在查询的时候会自动做表连接。将两张表做hash join操作:
1.EXPLAIN SELECT * FROM X WHERE x_num IN(SELECT y_num FROM y);
2. QUERY PLAN
3.----------------------------------------------------------------------
4. Hash Join (cost=23.25..49.88 rows=350 width=86)
5. Hash Cond: (x.x_num = y.y_num)
6. -> Seq Scan on x (cost=0.00..17.00 rows=700 width=86)
7. -> Hash (cost=20.75..20.75 rows=200 width=4)
8. -> HashAggregate (cost=18.75..20.75 rows=200 width=4)
-> Seq Scan on y (cost=0.00..17.00 rows=700 width=4)

以上是关于postgresql关于in和exists使用的主要内容,如果未能解决你的问题,请参考以下文章

postgresql----IN&&EXISTS

SQL关于IN和EXISTS的用法和区别的比较

关于oracle中in和exists的区别

关于sql中in 和 exists 的效率问题,in真的效率低吗

pg关于not in和not exists的使用

PostgreSQL 12.2 公开课及视频及PGCE认证(第10期)(CUUG)(2020年)