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

pgsql查詢優(yōu)化之模糊查詢實例詳解

 更新時間:2019年07月28日 11:20:21   作者:_AlexYIN  
這篇文章主要給大家介紹了關于pgsql查詢優(yōu)化之模糊查詢的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用pgsql具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

一直以來,對于搜索時模糊匹配的優(yōu)化一直是個讓人頭疼的問題,好在強大pgsql提供了優(yōu)化方案,下面就來簡單談一談如何通過索引來優(yōu)化模糊匹配

案例

我們有一張千萬級數(shù)據(jù)的檢查報告表,需要通過檢查報告來模糊搜索某個條件,我們先創(chuàng)建如下索引:

CREATE INDEX lab_report_report_name_index ON lab_report USING btree (report_name);

然后搜個簡單的模糊匹配條件如 LIKE "血常規(guī)%",可以發(fā)現(xiàn)查詢計劃生成如下,索引并沒有被使用上,這是因為傳統(tǒng)的btree索引并不支持模糊匹配

查閱文檔后發(fā)現(xiàn),pgsql可以在Btree索引上指定操作符:text_pattern_ops、varchar_pattern_ops和bpchar_pattern_ops,它們分別對應字段類型text、varchar和char,官方解釋為“它們與默認操作符類的區(qū)別是值的比較是嚴格按照字符進行而不是根據(jù)區(qū)域相關的排序規(guī)則。這使得這些操作符類適合于當一個數(shù)據(jù)庫沒有使用標準“C”區(qū)域時被使用在涉及模式匹配表達式(LIKE或POSIX正則表達式)的查詢中。”, 有些抽象,我們先試試看。創(chuàng)建如下索引并查詢剛才的條件 LIKE"血常規(guī)%":(參考pgsql的文檔https://www.postgresql.org/docs/10/indexes-opclass.html)

CREATE INDEX lab_report_report_name_index ON lab.lab_report (report_name varchar_pattern_ops);

發(fā)現(xiàn)確實可以走索引掃描 ,執(zhí)行時間也從213ms優(yōu)化到125ms,但是,如果搜索LIKE "%血常規(guī)%"就又會走全表掃描了! 這里我們引入本篇博客的主角"pg_trgm"和"pg_bigm"。

創(chuàng)建這兩個索引前分別需要引入如下兩個擴展包 :

CREATE EXTENSION pg_trgm;
CREATE EXTENSION pg_bigm;

這兩個索引的區(qū)別是:“pg_tigm”為pgsql官方提供的索引,"pg_tigm"為日本開發(fā)者提供。下面是詳細的對比:(參考pg_bigm的文檔http://pgbigm.osdn.jp/pg_bigm_en-1-2.html)

Comparison with pg_trgm

Thepg_trgmcontrib module which provides full text search capability using 3-gram (trigram) model is included in PostgreSQL. The pg_bigm was developed based on the pg_trgm. They have the following differences:

Functionalities and Features pg_trgm pg_bigm
Phrase matching method for full text search 3-gram 2-gram
Available index GIN and GiST GIN only
Available text search operators LIKE (~~), ILIKE (~~*), ~, ~* LIKE only
Full text search for non-alphabetic language
(e.g., Japanese)
Not supported (*1) Supported
Full text search with 1-2 characters keyword Slow (*2) Fast
Similarity search Supported Supported (version 1.1 or later)
Maximum indexed column size 238,609,291 Bytes (~228MB) 107,374,180 Bytes (~102MB)

(*1) You can use full text search for non-alphabetic language by commenting out KEEPONLYALNUM macro variable in contrib/pg_trgm/pg_trgm.h and rebuilding pg_trgm module. But pg_bigm provides faster non-alphabetic search than such a modified pg_trgm.

(*2) Because, in this search, only sequential scan or index full scan (not normal index scan) can run.

pg_bigm 1.1 or later can coexist with pg_trgm in the same database, but pg_bigm 1.0 cannot.

如無特殊要求推薦使用"pg_bigm",我們測試一下效果:

可以使用位圖索引掃描,對于本次案例,使用pg_trgm效果同pg_bigm。

以上

本文只是簡單的介紹許多細節(jié)并未做深入的分析,歡迎留言指教或者討論

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • postgresql踩坑系列之關于to_date()問題

    postgresql踩坑系列之關于to_date()問題

    這篇文章主要介紹了postgresql踩坑系列之關于to_date()問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • PostgreSQL定時清理舊數(shù)據(jù)的實現(xiàn)方法

    PostgreSQL定時清理舊數(shù)據(jù)的實現(xiàn)方法

    最近覺得數(shù)據(jù)庫中每日數(shù)據(jù)不需要都保持,只需要保留30天的,所以這篇文章給大家介紹了PostgreSQL定時清理舊數(shù)據(jù)的實現(xiàn)方法,文中通過代碼示例和圖文給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-03-03
  • postgres 連接數(shù)查看與設置操作

    postgres 連接數(shù)查看與設置操作

    這篇文章主要介紹了postgres 連接數(shù)查看與設置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • windows PostgreSQL 9.1 安裝詳細步驟

    windows PostgreSQL 9.1 安裝詳細步驟

    這篇文章主要介紹了windows PostgreSQL 9.1 安裝詳細步驟,需要的朋友可以參考下
    2016-11-11
  • PostgreSQL邏輯復制解密原理解析

    PostgreSQL邏輯復制解密原理解析

    邏輯復制,是基于復制標識復制數(shù)據(jù)及其變化的一種方法,區(qū)別于物理復制對頁面操作的描述,邏輯復制是對事務及數(shù)據(jù)元組的一種描述,這篇文章主要介紹了PostgreSQL邏輯復制解密原理解析,需要的朋友可以參考下
    2022-09-09
  • postgresql 實現(xiàn)查詢某時間區(qū)間的所有日期案例

    postgresql 實現(xiàn)查詢某時間區(qū)間的所有日期案例

    這篇文章主要介紹了postgresql 實現(xiàn)查詢某時間區(qū)間的所有日期案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • postgresql中時間轉換和加減操作

    postgresql中時間轉換和加減操作

    這篇文章主要介紹了postgresql中時間轉換和加減操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Linux CentOS 7源碼編譯安裝PostgreSQL9.5

    Linux CentOS 7源碼編譯安裝PostgreSQL9.5

    這篇文章主要為大家詳細介紹了Linux CentOS 7源碼編譯安裝PostgreSQL9.5的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 如何在PostgreSQL中創(chuàng)建只讀權限和讀寫權限的賬號

    如何在PostgreSQL中創(chuàng)建只讀權限和讀寫權限的賬號

    一個良好的賬號管理策略對于數(shù)據(jù)庫的安全和數(shù)據(jù)的完整性至關重要,通過為不同的用戶設置適當?shù)臋嘞?可以確保他們只能訪問他們需要的數(shù)據(jù),并防止對敏感數(shù)據(jù)的意外或惡意訪問,本文介紹在 PostgreSQL中創(chuàng)建只讀權限和讀寫權限的賬號的步驟和方法,感興趣的朋友一起看看吧
    2023-08-08
  • 關于向PostgreSQL數(shù)據(jù)庫插入Date類型數(shù)據(jù)報錯問題解決方案

    關于向PostgreSQL數(shù)據(jù)庫插入Date類型數(shù)據(jù)報錯問題解決方案

    本文給大家介紹在將數(shù)據(jù)庫從Oracle改為PostgreSQL時遇到的日期類型插入錯誤,通過使用PostgreSQL的特定語法和更改動態(tài)SQL語句解決了問題,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2024-12-12

最新評論

鹤岗市| 东至县| 雷波县| 鄂托克旗| 龙泉市| 平原县| 常山县| 沂水县| 西乌珠穆沁旗| 宁国市| 巩留县| 南召县| 伊金霍洛旗| 舞阳县| 饶阳县| 阜城县| 洪江市| 红原县| 平和县| 怀化市| 西充县| 清远市| 阳原县| 邢台市| 文成县| 徐闻县| 美姑县| 淳化县| 鄂尔多斯市| 临安市| 湖口县| 文水县| 开江县| 广汉市| 沾化县| 西和县| 饶阳县| 嘉祥县| 重庆市| 周口市| 泰兴市|