最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年02月01日 12:05:49   作者:yibei8811  
這篇文章主要介紹了postgresql 中position函數(shù)的性能詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

起因:

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

而我需要返回從后向前查找第一個(gè)匹配到的坐標(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倍以上的性能差距,那么探究緣由就變成一個(gè)有意思的事情。也算第一次嘗試翻閱數(shù)據(jù)庫源碼,中間總是有點(diǎn)小麻煩,不過當(dāng)我找到如下代碼的時(shí)候,那種恍然大悟的欣喜也算滿足了自己求知欲。

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

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

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

解決方法如下

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

測試性能截圖

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

tips:

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

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

LOCATE()

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

注:當(dāng)在 MySQL 4.0 中時(shí),如有任一參數(shù)是一個(gè)二進(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)時(shí),返回的還是第一次出現(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類似的集合

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

相關(guān)文章

  • PostgreSQL中的VACUUM命令用法說明

    PostgreSQL中的VACUUM命令用法說明

    這篇文章主要介紹了PostgreSQL中的VACUUM命令用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • postgresql數(shù)據(jù)合并,多條數(shù)據(jù)合并成1條的操作

    postgresql數(shù)據(jù)合并,多條數(shù)據(jù)合并成1條的操作

    這篇文章主要介紹了postgresql數(shù)據(jù)合并,多條數(shù)據(jù)合并成1條的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Windows PostgreSQL 安裝圖文教程

    Windows PostgreSQL 安裝圖文教程

    PostgreSQL是一套功能強(qiáng)大的對(duì)象-關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。經(jīng)過十幾年的發(fā)展, PostgreSQL 是世界上可以獲得的最先進(jìn)的開放源碼的數(shù)據(jù)庫系統(tǒng)
    2009-08-08
  • 聊聊PostgreSql table和磁盤文件的映射關(guān)系

    聊聊PostgreSql table和磁盤文件的映射關(guān)系

    這篇文章主要介紹了聊聊PostgreSql table和磁盤文件的映射關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Postgresql備份和增量恢復(fù)方案

    Postgresql備份和增量恢復(fù)方案

    這篇文章主要給大家介紹了關(guān)于Postgresql備份和增量恢復(fù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Postgresql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Postgresql開啟遠(yuǎn)程訪問的步驟全紀(jì)錄

    Postgresql開啟遠(yuǎn)程訪問的步驟全紀(jì)錄

    postgre一般默認(rèn)為本地連接,不支持遠(yuǎn)程訪問,所以如果要開啟遠(yuǎn)程訪問,需要更改安裝文件的配置。下面這篇文章主要給大家介紹了關(guān)于Postgresql開啟遠(yuǎn)程訪問的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2018-03-03
  • Postgresql 檢查數(shù)據(jù)庫主從復(fù)制進(jìn)度的操作

    Postgresql 檢查數(shù)據(jù)庫主從復(fù)制進(jìn)度的操作

    這篇文章主要介紹了Postgresql 檢查數(shù)據(jù)庫主從復(fù)制進(jìn)度的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 解決PostgreSQL服務(wù)啟動(dòng)后占用100% CPU卡死的問題

    解決PostgreSQL服務(wù)啟動(dòng)后占用100% CPU卡死的問題

    前文書說到,今天耗費(fèi)了九牛二虎之力,終于馴服了NTFS權(quán)限安裝好了PostgreSQL,卻不曾想,服務(wù)啟動(dòng)后,新的狀況又出現(xiàn)了。
    2009-08-08
  • 解決PostgreSQL數(shù)據(jù)遷移過程中的數(shù)據(jù)類型不匹配問題

    解決PostgreSQL數(shù)據(jù)遷移過程中的數(shù)據(jù)類型不匹配問題

    在數(shù)據(jù)遷移的過程中,經(jīng)常會(huì)遇到源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫之間的數(shù)據(jù)類型不匹配的情況,對(duì)于 PostgreSQL 數(shù)據(jù)庫來說,處理這種數(shù)據(jù)類型不匹配問題需要一些特定的策略和技巧,需要的朋友可以參考下
    2024-07-07
  • PostgreSQL之分區(qū)表(partitioning)

    PostgreSQL之分區(qū)表(partitioning)

    通過合理的設(shè)計(jì),可以將選擇一定的規(guī)則,將大表切分多個(gè)不重不漏的子表,這就是傳說中的partitioning。比如,我們可以按時(shí)間切分,每天一張子表,比如我們可以按照某其他字段分割,總之了就是化整為零,提高查詢的效能
    2016-11-11

最新評(píng)論

闽清县| 湟中县| 离岛区| 双桥区| 镇坪县| 织金县| 丰镇市| 忻城县| 固安县| 屏山县| 深泽县| 林口县| 清镇市| 无棣县| 昆明市| 怀来县| 罗源县| 梁平县| 新化县| 新龙县| 凤庆县| 昔阳县| 博野县| 清苑县| 陵水| 夏津县| 上饶县| 枣庄市| 望江县| 嘉禾县| 安吉县| 增城市| 湖州市| 曲麻莱县| 津市市| 应用必备| 新平| 永靖县| 禄丰县| 聂拉木县| 顺昌县|