暂无图片
postgreSQL IN 跟~ 寻找,哪个更快一些?
我来答
分享
暂无图片 匿名用户
postgreSQL IN 跟~ 寻找,哪个更快一些?

postgreSQL IN 跟~ 寻找,哪个更快一些?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
周波

  在postgresql中,in和~都有着查找筛选的功能,但特点有所不同,in是精确匹配,~是模糊匹配,返回的结果可能也不一样。如果真的出于好奇,看看谁的查找速度快,这里就简单场景作了简单的测试分析:
测试数据:本次测试使用一张拥有两个字段的表,测试表拥有10w记录且没有索引。

  • 1.单个条件场景下
    如果你已经确认自己需要的数据为name=‘weha’:
postgres=# explain (analyze,costs,timing,buffers,verbose) select * from t1 where name in ('weha');
                                              QUERY PLAN                                              
------------------------------------------------------------------------------------------------------
 Seq Scan on public.t1  (cost=0.00..1790.99 rows=1 width=9) (actual time=8.356..8.357 rows=0 loops=1)
   Output: name, id
   Filter: ((t1.name)::text = 'weha'::text)
   Rows Removed by Filter: 99999
   Buffers: shared hit=541
 Query Identifier: 763579006506276171
 Planning Time: 0.036 ms
 Execution Time: 8.375 ms
(8 rows)

postgres=# explain (analyze,costs,timing,buffers,verbose) select * from t1 where name ~ 'weha';
                                               QUERY PLAN                                                
---------------------------------------------------------------------------------------------------------
 Seq Scan on public.t1  (cost=0.00..1790.99 rows=10 width=9) (actual time=32.902..32.903 rows=0 loops=1)
   Output: name, id
   Filter: ((t1.name)::text ~ 'weha'::text)
   Rows Removed by Filter: 99999
   Buffers: shared hit=541
 Query Identifier: 3494832519667728161
 Planning Time: 0.080 ms
 Execution Time: 32.920 ms
(8 rows)

复制

从执行结果来看,in效率更高,速度比~快四倍左右。

  • 2.多个条件情况
    如果你已经确认自己想要的数据是name='weha’和name=‘dgah’:
postgres=# explain (analyze,costs,timing,buffers,verbose) select * from t1 where name in ('weha','dgah');
                                               QUERY PLAN                                               
--------------------------------------------------------------------------------------------------------
 Seq Scan on public.t1  (cost=0.00..1790.99 rows=2 width=9) (actual time=10.336..10.337 rows=0 loops=1)
   Output: name, id
   Filter: ((t1.name)::text = ANY ('{weha,dgah}'::text[]))
   Rows Removed by Filter: 99999
   Buffers: shared hit=541
 Query Identifier: -6924189025668182606
 Planning Time: 0.047 ms
 Execution Time: 10.353 ms
(8 rows)

postgres=# explain (analyze,costs,timing,buffers,verbose) select * from t1 where name ~ 'weha' or name ~ 'dgah';
                                               QUERY PLAN                                                
---------------------------------------------------------------------------------------------------------
 Seq Scan on public.t1  (cost=0.00..2040.98 rows=20 width=9) (actual time=64.827..64.828 rows=0 loops=1)
   Output: name, id
   Filter: (((t1.name)::text ~ 'weha'::text) OR ((t1.name)::text ~ 'dgah'::text))
   Rows Removed by Filter: 99999
   Buffers: shared hit=541
 Query Identifier: -6547093916629956015
 Planning Time: 0.173 ms
 Execution Time: 64.869 ms
(8 rows)

复制

  从执行结果来看,in的效率依旧高于~,速度比~快6倍左右。
  以次类推,并且随着查询条件的增加,in的执行效率会比~越来越高。
  通过测试结果得出,在本次测试场景下,in的执行效率高于~。

暂无图片 评论
暂无图片 有用 3
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
bt_index_check是从哪个版本开始支持的??
回答 2
这个函数是从pg11开始,amcheck插件提供的函数。
postgresql如何撤销上一步sql语句命令
回答 1
两种方式:一种类似flashback功能pgdirtyread的插件。https://www.modb.pro/db/42831一种是类似logminer的插件,walminerhttps://www
pg_rman备份报错,提示00000005.history.done 找不到
回答 1
目录没有找对,设置一下归档文件的环境变量试试
inner join后面7个关联条件,导致的sql性能问题,有没有人指点一下优化思路?
回答 1
已采纳
两个思路。一个是拆分join然后在应用端join二个是看能否延迟关联,比如selectfromainnerjoinbona.idb.idleftjoinconb.idc.idwherea.id1and
pg_top安装失败
回答 2
参考文章<pgtop安装及使用说明>:https://cdn.modb.pro/db/251500
postgreSQL 表膨胀详细介绍有吗?
回答 3
学习了
PostgreSQL如何获取连接会话的os username?
回答 2
设置变量\set可以调用操作系统级别的命令和环境变量postgres\setosnamewhoamipostgres\echo:osnamepostgres
postgreSQL 用dblink如果做数据同步的时候,参数如果放到dblink外面,dblink('select * from test ')where id =**会很慢,该如何进行优化?
回答 2
dblink就不适合做数据同步,数据同步考虑一些CDC软件吧。
patroni重做备库报错
回答 1
这日志不全啊,你可以把节点的patroni停了,然后用pgbasebackup重做从库,然后再启动patroni。
pg中过滤因子的选择,是过滤因子大好还是小好?
回答 2
id的过滤性为0.01,相当于100值个中有1个值符合条件。过滤性更好,所以在id上建索引性能更好。
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~