码迷,mamicode.com
首页 > 其他好文 > 详细

postgres in查询优化

时间:2020-01-19 17:47:46      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:rom   有一个   查询   pos   HERE   优化   结果   修改   其他   

项目场景:

从kafka消费N条数据,每条带有一个id,从表A中查出这N个id对应的N条记录,继续做其他业务

翻译:select * from A where id in("1","2","3","4","5",..............)

这里的id是一个字符串,非数值型,N是一个可配的(比如我们一般是2000-4000),表示一次从kafka消费的条数

表A数据量:5000万以内

数据库:postgres 9.6

初期:直接暴力执行select * from A where id in("1","2","3","4","5",..............)查出结果,因为考虑到性能,N只给500-1000条

然而查询很慢,严重影响后续整个的速度

修改一:将N个id的查询改为200个一批查一次,每次的结果拼接后组成N条记录

修改二:将N个id的查询改为200个一批,开10个线程查询,最后结果合并

这样的查询,速度也可以接受,但是总感觉应该还有别的方式处理in操作

于是找到了regexp_split_to_table这个函数:

SELECT * from regexp_split_to_table(‘111,222,333,444‘,‘,‘) t left JOIN A on A.id = t;

该函数将一个list转化成一张临时表(案列中的in的条件),与将要查询的表做联表查询,左表的量相当于in条件的id个数

项目中大表量最大为8000万,

sql实例:

select f.* from (select regexp_split_to_table(#{picIds},‘,‘)as id) as t, dw_face_feature f where t.id = f.human_pic_id 
有兴趣的伙伴可以放入项目中一试~~

postgres in查询优化

标签:rom   有一个   查询   pos   HERE   优化   结果   修改   其他   

原文地址:https://www.cnblogs.com/yb38156/p/11195727.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!