小程序制作平台网站设计平台 互联网品牌制作专家
关于A5客户收购GoogleAdsense带有搜索账户的相关事宜更多

软文发布平台资讯中心

postgresql中position函数的性能详解

postgresql中position函数的性能详解

  项目招商找A5 快速获取精准代理名单

这篇文章主要介绍了postgresql 中position函数的性能详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。

起因:

postgresql中position函数提供从头查找返回第一个匹配到字符串的下标。

而我需要返回从后向前查找第一个匹配到的坐标,但是postgressql并未提供相关函数,所以自己写了如下代码提供相关功能:

CREATE OR REPLACE FUNCTION lastindexof(text, character)RETURNS integer AS$BODY$beginif $1 is null then return NULL;end if;for i in reverse length($1) .. 1loop if substr($1,i,1) = $2 then return i; end if;end loop;return NULL;end$BODY$LANGUAGE plpgsql IMMUTABLE STRICT

本来以为事情完美解决,但是性能的差距却让人感觉很失望,如下图

数据库原生的“position”和自己提供“lastindexof”,居然产生了30倍以上的性能差距,那么探究缘由就变成一个有意思的事情。也算第一次尝试翻阅数据库源码,中间总是有点小麻烦,不过当我找到如下代码的时候,那种恍然大悟的欣喜也算满足了自己求知欲。

注意看1054行,运用了指针~ 可见数据库底层运算,用了引用传递,而我自己写的函数是一个拷贝传递。

原因找到了,解决问题也就手到擒来,拿C写一个扩展?或者?

本可以拿C写一些底层代码练练手,不过那又需要重新编译等等,时间有限,留给以后去做吧,先想个简单的办法去解决它。

解决方法如下

1select length(dir) -position('/' in reverse(dir)) +1 from log_hup_ftp_30

测试性能截图

好吧,虽然由于函数的复杂性增加,性能还是慢了一倍多,但是比起之前5s之久还是快了不少。

tips:

最近得到德哥的回答,引用传递可以使用游标类型!再次谢谢德哥~

补充: SQL之查询函数LOCATE、POSITION、INSTR、FIND_IN_SET、IN、LIKE

LOCATE()返回要查询的字符串在被查询字符串里第一次出现的位置

注:当在 MySQL 4.0 中时,如有任一参数是一个二进制字符串,它才是字母大小写敏感的

LOCATE(substr,str)返回substr字符串在str里第一次出现的位置,没有返回0

SELECT LOCATE('.',t.str)FROM `table`

t;>5

LOCATE(substr,str,pos)返回substr字符串在str里pos(起始位置)出现的位置,没有返回0

注:pos必须大于第一次出现的位置,才能显示第二次出现的位置

SELECT LOCATE('.',t.str,6)FROM `table` t;>9//当小于等于第一次出现的位置(5)时,返回的还是第一次出现的位置

POSITION()返回要查询的字符串在被查询字符串里第一次出现的位置(和locate用法一样,查了很多资料position是locate的别名)

POSITION(substr IN str)返回substr字符串在str出现的位置,没有返回0

SELECT POSITION('cn' IN t.str)FROM `table` t;>10

INSTR()返回要查询的字符串在被查询字符串里第一次出现的位置。这和LOCATE()的双参数形式相同,只是参数的顺序被颠倒。

INSTR(str,substr)返回substr字符串在str出现的位置,没有返回0

SELECT FIND_IN_SET('demo.com.cn',t.str) FROM `table` t;>1//返回索引

FIND_IN_SET()返回在集合中的索引位置(竖向发展)

FIND_IN_SET(str,strlist)返回str1在strlist集合中的索引位置

SELECT 'demo.com.cn' IN(t.str) FROM `table` t;>1//返回索引

IN()返回在集合中的索引位置(同FIND_IN_SET)

str IN (strlist)返回str1在strlist集合中的索引位置

SELECT 'demo.com.cn' IN(t.str) FROM `table` t;>1//返回索引

LIKE返回类似(模糊)字符的集合

LIKE %str%返回以str类似的集合

文章来源:脚本之家

来源地址:https://www.jb51.net/article/205181.htm

尊敬的看官您对postgresql中position函数的性能详解有什么看法呢?互联网品牌制作专家愿与您共同探讨!版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请加微信号oem365 举报,一经查实,本站将立刻删除。

上一篇: PostGreSql判断字符串中是否有中文的案例   返 回   下一篇:淘宝怎么查看同行宝贝类目?如何选择?

相关资讯

小程序应用场景 | 小程序解决方案 | 小程序案例 | 小程序应功能 | 软文发布资源 | 网站设计

酒店预约解决方案
酒店预约小程序走红网络,也是传统转型的重要变化
详情
投票解决方案
强大功能,傻瓜式管理,有效防止作弊刷票
详情
新零售解决方案
小程序是现在新零售的新方式,深度结合线上线下
详情
预约服务解决方案
预约到店小程序通过用户在线预约到店等
详情
企业官网解决方案
企业展示小程序主要展示企业信息、产品案例等
详情
教育培训解决方案
主要展示教育机构的课程、可在线预约与购买课程
详情
推广解决方案
可以让企业通过推广模式全面展示自己的产品
详情
到店解决方案
到店服务解决方案,主要是面向实体餐饮门店
详情

我们的服务是否能满足您的需求?

如果不能,请联系我们或给我们留言,我们收到后会第一时间联系您!感谢您对我们的关注!

粤公网安备 44200002005005号