postgresql中位置函数性能的详细说明
  • 作者:admin
  • 发表时间:2021-05-06 07:51
  • 来源:未知

本文主要介绍postgresql中position函数性能的详细说明,具有很好的参考价值,希望对大家有所帮助。来和边肖一起看看。

原因:

postgresql中的position函数提供从头开始搜索,以返回与字符串匹配的第一个下标。

而且我需要从后向前返回寻找第一个匹配坐标,但是postgressql不提供相关函数,所以我写了下面的代码来提供相关函数:

创建或替换函数lastindexof(文本,字符)

以整数形式返回

$BODY$

开始

如果$1为空,则返回空;

结束if;

对于长度相反的I(1美元).一

Nbs唐山快排名P;if substr($1,I,1)=2美元

然后

返回I;

结束if;

结束循环;

返回空值;

结束

$BODY$

不可变严格语言

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

数据库原来的“位置”和自己提供的“lastindexof”产生了30倍以上的性能差距,探究原因就变得很有意思了。也是第一次尝试看数据库源码,但是中间总有一点小麻烦,但是当我发现下面的代码的时候,突然体会到的喜悦可以满足我的求知欲。

注意1054行,用指针~可见数据库底层操作,用引用传递,我自己写的函数是复制传递。

找到原因,就很容易解决问题。用C写扩展?还是?

我可以用C写一些低级代码来练手,但是需要重新编译等等。时间有限。以后交给我吧,先想个简单的办法解决。

解决方案如下

1从log_hup_ftp_30中选择长度(dir)-位置('/'在反向(dir)) 1

测试性能截图

嗯,虽然由于功能复杂度增加,性能慢了一倍多,但还是比之前的5s快很多。

tips:

最近德哥回答光标类型可以用来做参考传递!再次感谢德哥~

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

LOCATE()返回要查询的字符串首次出现在查询字符串中的位置

注意:在MySQL 4.0中,如果任何参数是二进制字符串,它是区分字母大小写的

LOCATE(substr,str)返回字符串中第一个出现的子字符串,但不返回0

选择定位('.',t.str)FROM `table '

t;五

LOCATE(substr,str,pos)返回子字符串在字符串中出现的位置(起始位置),但不返回0

注意:pos必须大于第一个位置才能显示第二个位置

选择定位('.',t.str,6)FROM ` table ` t;9//当它小于或等于第一个外观位置(5)时,返回第一个外观位置