婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > postgresql 中position函數(shù)的性能詳解

postgresql 中position函數(shù)的性能詳解

熱門標(biāo)簽:廣州電銷機(jī)器人公司招聘 天津開發(fā)區(qū)地圖標(biāo)注app 地圖標(biāo)注要花多少錢 電話機(jī)器人怎么換人工座席 電銷機(jī)器人能補救房產(chǎn)中介嗎 濟(jì)南外呼網(wǎng)絡(luò)電話線路 移動外呼系統(tǒng)模擬題 400電話申請客服 江蘇400電話辦理官方

起因:

postgresql中position函數(shù)提供從頭查找返回第一個匹配到字符串的下標(biāo)。

而我需要返回從后向前查找第一個匹配到的坐標(biāo),但是postgressql并未提供相關(guān)函數(shù),所以自己寫了如下代碼提供相關(guān)功能:

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

本來以為事情完美解決,但是性能的差距卻讓人感覺很失望,如下圖

數(shù)據(jù)庫原生的“position”和自己提供“l(fā)astindexof”,居然產(chǎn)生了30倍以上的性能差距,那么探究緣由就變成一個有意思的事情。也算第一次嘗試翻閱數(shù)據(jù)庫源碼,中間總是有點小麻煩,不過當(dāng)我找到如下代碼的時候,那種恍然大悟的欣喜也算滿足了自己求知欲。

注意看1054行,運用了指針~ 可見數(shù)據(jù)庫底層運算,用了引用傳遞,而我自己寫的函數(shù)是一個拷貝傳遞。

原因找到了,解決問題也就手到擒來,拿C寫一個擴(kuò)展?或者?

本可以拿C寫一些底層代碼練練手,不過那又需要重新編譯等等,時間有限,留給以后去做吧,先想個簡單的辦法去解決它。

解決方法如下

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

測試性能截圖

好吧,雖然由于函數(shù)的復(fù)雜性增加,性能還是慢了一倍多,但是比起之前5s之久還是快了不少。

tips:

最近得到德哥的回答,引用傳遞可以使用游標(biāo)類型!再次謝謝德哥~

補充: SQL之查詢函數(shù)LOCATE、POSITION、INSTR、FIND_IN_SET、IN、LIKE

LOCATE()

返回要查詢的字符串在被查詢字符串里第一次出現(xiàn)的位置

注:當(dāng)在 MySQL 4.0 中時,如有任一參數(shù)是一個二進(jìn)制字符串,它才是字母大小寫敏感的

LOCATE(substr,str)

返回substr字符串在str里第一次出現(xiàn)的位置,沒有返回0

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

LOCATE(substr,str,pos)

返回substr字符串在str里pos(起始位置)出現(xiàn)的位置,沒有返回0

注:pos必須大于第一次出現(xiàn)的位置,才能顯示第二次出現(xiàn)的位置

SELECT LOCATE('.',t.str,6)FROM `table` t;
>9//當(dāng)小于等于第一次出現(xiàn)的位置(5)時,返回的還是第一次出現(xiàn)的位置

POSITION()

返回要查詢的字符串在被查詢字符串里第一次出現(xiàn)的位置(和locate用法一樣,查了很多資料position是locate的別名)

POSITION(substr IN str)

返回substr字符串在str出現(xiàn)的位置,沒有返回0

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

INSTR()

返回要查詢的字符串在被查詢字符串里第一次出現(xiàn)的位置。這和LOCATE()的雙參數(shù)形式相同,只是參數(shù)的順序被顛倒。

INSTR(str,substr)

返回substr字符串在str出現(xiàn)的位置,沒有返回0

SELECT INSTR(t.str,'com')FROM `table` t;
>6

FIND_IN_SET()

返回在集合中的索引位置(豎向發(fā)展)

FIND_IN_SET(str,strlist)

返回str1在strlist集合中的索引位置

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

IN()

返回在集合中的索引位置(同F(xiàn)IND_IN_SET)

str IN (strlist)

返回str1在strlist集合中的索引位置

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

LIKE

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

LIKE %str%

返回以str類似的集合

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • postgresql 中的to_char()常用操作
  • PostgreSQL 字符串處理與日期處理操作
  • PostgreSQL字符切割:substring函數(shù)的用法說明
  • Postgresql 截取字符串的案例
  • postgresql 實現(xiàn)字符串分割字段轉(zhuǎn)列表查詢
  • postgresql 查詢集合結(jié)果用逗號分隔返回字符串處理的操作

標(biāo)簽:溫州 海西 辛集 寶雞 濮陽 榆林 昭通 杭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《postgresql 中position函數(shù)的性能詳解》,本文關(guān)鍵詞  postgresql,中,position,函數(shù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《postgresql 中position函數(shù)的性能詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于postgresql 中position函數(shù)的性能詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 和平县| 陆良县| 巩义市| 镇雄县| 莱西市| 阜平县| 镇坪县| 马鞍山市| 镇原县| 滦南县| 葫芦岛市| 和静县| 怀来县| 乌恰县| 江西省| 松江区| 宁都县| 读书| 黄石市| 遵化市| 讷河市| 唐海县| 门头沟区| 北宁市| 垫江县| 桓仁| 南昌市| 台湾省| 密云县| 岳阳县| 郯城县| 高碑店市| 阿拉善左旗| 西和县| 大冶市| 高清| 古丈县| 眉山市| 揭东县| 务川| 滦南县|