1、带前缀的模糊查询  ~'^abc'

可以使用btree索引优化

create index idx_info on table_name(info)  

2、带后缀的模糊查询  ~'abc$'

可以使用reverse函数btree索引

create index idx_info1 on table_name(reverse(info)); 

3、不带前后缀的模糊查询和正则表达式查询

pg_trgm可以使用trgm的gin索引

CREATE EXTENSION pg_trgm;

CREATEINDEX idx_info2 ontable_name using gin(info gin_trgm_ops);

重点说一下涉及到中文匹配的优化方法,因为trgm不支持wchar,因此需要转换,本来相对TEXT(textsend(text))函数创建索引,但是报错提醒函数必须是IMMUTABLE,因此手中创建一个

函数

create or replace function textsend_i (text) returns bytea as
$$ select textsend($1); $$
language sql
strict immutable;

然后再创建索引:

 create index idx_name_1 on jd_daojia_product_1225 using gin(text(textsend_i(product_name)) gin_trgm_ops);

执行查询,发现已经走索引了

SELECT * FROM jd_daojia_product_1225 where text(textsend_i(product_name)) ~ text(textsend_i('苹果')) limit 10

Limit  (cost=22.60..63.55 rows=10 width=295)
-> Bitmap Heap Scan on jd_daojia_product_1225 (cost=22.60..1398.39 rows=336 width=295)
Recheck Cond: ((textsend_i(product_name))::text ~ '\350\213\271\346\236\234'::text)
-> Bitmap Index Scan on idx_name_1 (cost=0.00..22.52 rows=336 width=0)
Index Cond: ((textsend_i(product_name))::text ~ '\350\213\271\346\236\234'::text)

  

  

PostgreSQL正则及模糊查询优化的更多相关文章

  1. PostgreSQL代码分析,查询优化部分,pull_ands()和pull_ors()

    PostgreSQL代码分析,查询优化部分. 这里把规范谓词表达式的部分就整理完了,阅读的顺序例如以下: 一.PostgreSQL代码分析,查询优化部分,canonicalize_qual 二.Pos ...

  2. PostgreSQL代码分析,查询优化部分,canonicalize_qual

    这里把规范谓词表达式的部分就整理完了.阅读的顺序例如以下: 一.PostgreSQL代码分析,查询优化部分,canonicalize_qual 二.PostgreSQL代码分析,查询优化部分,pull ...

  3. mysql正则查询 模糊查询

    -- ==============正则查询================ /* SQL默认是忽略大小写的 正则模式使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们 ...

  4. 【PostgreSQL】 前缀模糊查询级优化

    前匹配模糊 使用B-Tree来加速优化前匹配模糊查询 构造数据 新建一张商品表,插入一千万条数据. create table goods(id int, name varchar); insert i ...

  5. sql 模糊查询优化

    在sql语句中使用 like模糊查询时,应该尽量避免%%,因为模糊查询是比较慢的,当出现这样的情况时,应该考虑优化. 举个例子:我在表中查询2012 年创建的记录 SELECT * FROM `com ...

  6. Oracle大字段(clob)模糊查询优化方法

    对于内容很多的时候clob打字段模糊查询很慢,整理一个小方法: 1,在查询的列上建索引 2,对于要查询的clob字段使用一下语句创建索引   CREATE INDEX idx_zs_info_note ...

  7. MySQL的LIKE模糊查询优化

    原文链接:https://www.cnblogs.com/whyat/p/10512797.html %xxx%这种方式对于数据量少的时候,我们倒可以随意用,但是数据量大的时候,我们就体验到了查询性能 ...

  8. 德哥PostgreSQL学习资料汇总(转)

    文章来自:https://yq.aliyun.com/articles/59251?spm=5176.100239.bloglist.95.5S5P9S 德哥博客新地址:https://billtia ...

  9. mongoDB BI 分析利器 - PostgreSQL FDW (MongoDB Connector for BI)

    背景 mongoDB是近几年迅速崛起的一种文档型数据库,广泛应用于对事务无要求,但是要求较好的开发灵活性,扩展弹性的领域,. 随着企业对数据挖掘需求的增加,用户可能会对存储在mongo中的数据有挖掘需 ...

随机推荐

  1. 信息搜集之google语法

    总结的比较全,无耻的转了.D: http://blog.csdn.net/chaosa/article/details/1828301 说起Google,可谓无人不知无人不晓.作为世界第一的搜索引擎, ...

  2. java高级主题

    1 java.util.concurrent.locks.LockSupport park:阻塞线程. unpark:解除阻塞线程. 线程阻塞最基础的组件. 2 sun.misc.Unsafe 可以用 ...

  3. iOS系统层次架构

    本文转自:http://blog.csdn.net/lxl_815520/article/details/51172917 一,概述 iOS的系统架构分为四个层次:核心操作系统层(Core OS la ...

  4. js绑定键盘enter事件

    js写法: document.onkeydown = function(event){ var event=document.all?window.event:event; if((event.key ...

  5. Django 之 admin组件使用&源码解析

    admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 settings.py 中的 INSTALLED ...

  6. spring 注解管理

    一.注解准备 1.xml引入新的约束,并开启注解扫描 context:component-scan标签开启注解扫描 2.导入注解有关jar包 二.注解创建对象 1.User类 @Component( ...

  7. emmet缩写格式

    2016年5月30日 10:10 标准网页<!DOCTYPE html> <html lang="zh-CN"> <head> <meta ...

  8. js琐碎知识点

    1.javascript发展史 javascript首先由Netscape设计,为改善浏览器用户体验,名为liveScript, 网景公司被sun公司收购,为了宣传改名为javascript 后来su ...

  9. CSS知识点 2

    回顾: 浮动:是css中布局最多的一个属性 有浮动,一定要清除浮动浮动不是一个元素单独浮动,要浮动一起浮动 清除浮动四种方式:1.给父盒子添加高度,一般导航栏2.给浮动元素后面加一个空的块标签,  并 ...

  10. 【二叉堆】k路归并问题(BSOJ1941)

    Description 有n个函数,分别为F1,F2,...,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci(x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复 ...