pgsql中模糊查询的字段是计算出来的参数,不是表中的字段该如何解决

pgsql中模糊查询的字段是计算出来的参数,不是表中的字段该如何解决,第1张

select 表1.num,count(表2.num) as 次数 from 表1 left outer join 表2 on 表2.num=表1.num group by 表1.num

如上SQL可以实现,假设表2的字段也是num,希望可以帮到你

补充:

如果表1的123对应表2的12345这样也符合的话:

下面SQL可以实现:

select 表1.num,count(表2.num) as 次数 from 表1 left outer join 表2 on charindex(cast(表1.num as varchar), cast(表2.num as varchar))>0 group by 表1.num

pg直接存json效率关于 pgsql 数据库json几个函数用法的效率测试

关于pgsql 几个 *** 作符的效率测试比较

1. json::->>和 ->>

测试方法:单次运行100次,运行10个单次取平均时间。

测试结果:->>效率高 5% 左右

功能差异:

json::->>在使用前需要对对象转换为jsonb 然后再执行 ->> *** 作,所以比->>更耗时 。

所以如果我们需要对返回的对象进行jsonb *** 作,用jsonb_* 相关函数时,

建议用jsonb_* 而不用 jsonb_*_text ,后者会把结果的jsonb对象转换为text,相对于会多两次 jsonb <-->text 转换 *** 作。

2. any 和 in

select * from table where column in('1','3','5','7')

select * from table where column any('{1,3,5,7}'::text[])

测试方法:单次运行100次,运行10个单次取平均时间。

测试结果:in 效率高 5% 左右

功能差异:

如果参数是自己传入的,那么建议用in(),如果参数是jsonb对象转换的可使用any。

搜索JSONB中一些预定的属性,可以使用Btree、HASH、GIN索引,一般使用BTREE;

如果索引要支持搜索任意属性,则使用GIN索引,如果只是检查它是否仅具有键值,使用jsonb_path_ops,但是如果不仅检查是否具有键值,还检查键的存在,最好使用jsonb_ops:

https://bitnine.net/blog-postgresql/postgresql-internals-jsonb-type-and-its-indexes/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9358460.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存