postgresql中position函数相关性能探究~

文章探讨了在PostgreSQL中使用position函数进行字符串搜索时遇到的性能问题。作者发现自定义的“lastindexof”函数性能比原生position慢30倍以上。通过阅读数据库源码,作者发现position函数利用指针进行引用传递,而自定义函数使用了拷贝传递。为了解决这个问题,作者提出了一个简单的解决方案,并展示了改进后的性能测试结果,虽然仍比原生函数慢一倍,但已显著优于最初的情况。文中还提及了德哥关于引用传递使用游标类型的建议。
摘要由CSDN通过智能技术生成

起因:

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

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

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

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

        

         数据库原生的“position”和自己提供“lastindexof”,居然产生了30倍以上的性能差距,那么探究缘由就变成一个有意思的事情。也算第一次尝试翻阅数据库源码,中间总是有点小麻烦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值