<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                > 問題現象:使用pgsql過程中,業務上常用的模糊查詢sql語句在執行過程中不經過索引 從下圖可以看出,like模糊查詢在執行過程中 Seq Scan on alerts 是順序掃描全表 ![](https://img.kancloud.cn/a4/3b/a43b405c03a4b76f2d26affe30dafdb9_726x573.png) **原因分析:** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pgsql傳統的btree索引并不支持模糊匹配,因此無論是‘網絡%’??這樣前置模糊,還是’%網絡%’?這樣全模糊查詢都不會走索引。 **解決方案一:為指定字段創建索引時,添加指定操作符** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pgsql可以在Btree索引上指定操作符:text\_pattern\_ops、varchar\_pattern\_ops和 bpchar\_pattern\_ops,它們分別對應字段類型text、varchar和 char,官方解釋為“它們與默認操作符類的區別是值的比較是嚴格按照字符進行而不是根據區域相關的排序規則。這使得這些操作符類適合于當一個數據庫沒有使用標準“C”區域時,被使用在涉及模式匹配表達式(LIKE或POSIX正則表達式)的查詢中。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因此,需要給需要模糊搜索的字段重新加上指定操作符的索引: `CREATE INDEX index_attack_alarm_event_desc ON "public"."alerts" (event_desc varchar_pattern_ops);` ``` [postgres@izwz91quxhnlkan8kjak5hz ~]$ psql psql (13.0) Type "help" for help. postgres=# select * from pg_indexes where tablename='alerts' and indexname='index_attack_alarm_event_desc'; schemaname | tablename | indexname | tablespace | indexdef ------------+-----------+-------------------------------+------------+-------------------------------------------------------------------------------------- public | alerts | index_attack_alarm_event_desc | | CREATE INDEX index_attack_alarm_event_desc ON public.alerts USING btree (event_desc) (1 row) postgres=# drop index index_attack_alarm_event_desc postgres-# \g DROP INDEX postgres=# CREATE INDEX index_attack_alarm_event_desc ON "public"."alerts" (event_desc varchar_pattern_ops); CREATE INDEX postgres=# select * from pg_indexes where tablename='alerts' and indexname='index_attack_alarm_event_desc'; schemaname | tablename | indexname | tablespace | indexdef ------------+-----------+-------------------------------+------------+---------------------------------------------------------------------------------------------------------- public | alerts | index_attack_alarm_event_desc | | CREATE INDEX index_attack_alarm_event_desc ON public.alerts USING btree (event_desc varchar_pattern_ops) (1 row) ``` **結果測試**: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下圖可見,這種方式創建索引后,相同語句的模糊搜索是有經過索引的 ![](https://img.kancloud.cn/ab/06/ab062a9874d7e6f52325d9671f0da492_787x629.png) **方案缺點:** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;這種方式創建的索引雖然可以解決’網絡%’這種后模糊查詢的不經過索引問題,但是 ‘%網絡’和‘%網絡%’這兩種模糊查詢方式(前=后置模糊和全模糊)依然會不經過索引,如下圖所示: ![](https://img.kancloud.cn/f0/52/f0525bfb4d91914329fff058121fedf3_712x489.png) **解決方案二:使用pg_trgm擴展解決模糊查詢不走索引的問題** > Pgsql有"pg\_trgm"和"pg\_bigm"這兩個擴展庫,“pg\_tigm”為pgsql官方提供的索引,"pg\_bigm"為日本開發者提供。pg\_bigm是基于pg\_trgm開發的。 如果需求需要實現全模糊和后置模糊,可以考慮引入這兩個擴展庫后,再創建擴展與索引: ``` CREATE EXTENSION pg_trgm; CREATE EXTENSION pg_bigm; ``` 具體實現詳見 [pgsql的pg_trgm擴展解析與驗證](http://docs.linchunyu.top/2280101)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看