本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
IN 条件
网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的 IN 条件测试一组值或子查询中的成员资格值。
语法
expression [ NOT ] IN (expr_list | table_subquery)
参数
- expression
-
数字、字符或日期时间表达式,针对 expr_list 或 table_subquery 进行计算,必须是与列表或子查询的数据类型兼容的。
- expr_list
-
一个或多个逗号分隔的表达式,或一组或多组逗号分隔的表达式(用括号限定)。
- table_subquery
-
一个子查询,计算结果为具有一行或多行的表,但在其选择列表中限制为一列。
- 在 | NOT 在
-
如果表达式是表达式列表或查询的成员,则 IN 返回 true。 NOT如果表达式不是成员,IN 则返回 true。在以下情况下,返回 IN NULL 和 IN 且不返回任何行:如果表达式结果为空;或者如果没有匹配的 expr_list 或 table_s ubquery 值,并且这些比较行中至少有一个返回空值。NOT
示例
下列条件仅对列出的值有效:
qtysold in (2, 4, 5) date.day in ('Mon', 'Tues') date.month not in ('Oct', 'Nov', 'Dec')
优化大型 IN 列表
为了优化查询性能,包含 10 个以上的值的 IN 列表将在内部作为标量数组计算。少于 10 个值的 IN 列表将作为一系列 OR 谓词计算。SMALLINT、、、、、INTEGER、BIGINT、REAL、DOUBLEPRECISIONBOOLEANCHARVARCHARDATETIMESTAMP、和TIMESTAMPTZ数据类型支持此优化。
查看查询的EXPLAIN输出以了解此优化的效果。例如:
explain select * from sales QUERY PLAN -------------------------------------------------------------------- XN Seq Scan on sales (cost=0.00..6035.96 rows=86228 width=53) Filter: (salesid = ANY ('{1,2,3,4,5,6,7,8,9,10,11}'::integer[])) (2 rows)