PostgreSQL如何高效筛选含多个指定元素任意一个的JSONB数组
更优实现方式
你不需要手动拼接多个OR条件,直接使用PostgreSQL jsonb类型原生支持的?|操作符即可,逻辑和你原有写法完全等价,执行效率更高,语句也更简洁:
SELECT * FROM leadtime.test WHERE name ?| ARRAY['abc', '132', '456'];
?|操作符的作用是判断左侧jsonb值是否包含右侧文本数组中的任意一个元素,正好匹配你的校验需求。
性能优化建议
如果表的数据量较大,你可以为name字段创建GIN索引,?|操作符可以直接利用该索引大幅降低查询耗时:
CREATE INDEX idx_test_name_gin ON leadtime.test USING GIN (name);
相比你原来多个OR拼接的写法,原生操作符的执行逻辑更紧凑,查询优化器可以生成更高效的执行计划,配合索引时性能差距会非常明显。
注意:该写法仅适用于你当前存储的「顶层元素为字符串的jsonb数组」场景,和你提供的测试数据结构完全适配,返回结果和原有写法一致。
内容的提问来源于stack exchange,提问作者Chau Loi
相关产品推荐
相关产品推荐

