PostgreSQL正则及模糊查询优化
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正则及模糊查询优化的更多相关文章
- PostgreSQL代码分析,查询优化部分,pull_ands()和pull_ors()
PostgreSQL代码分析,查询优化部分. 这里把规范谓词表达式的部分就整理完了,阅读的顺序例如以下: 一.PostgreSQL代码分析,查询优化部分,canonicalize_qual 二.Pos ...
- PostgreSQL代码分析,查询优化部分,canonicalize_qual
这里把规范谓词表达式的部分就整理完了.阅读的顺序例如以下: 一.PostgreSQL代码分析,查询优化部分,canonicalize_qual 二.PostgreSQL代码分析,查询优化部分,pull ...
- mysql正则查询 模糊查询
-- ==============正则查询================ /* SQL默认是忽略大小写的 正则模式使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们 ...
- 【PostgreSQL】 前缀模糊查询级优化
前匹配模糊 使用B-Tree来加速优化前匹配模糊查询 构造数据 新建一张商品表,插入一千万条数据. create table goods(id int, name varchar); insert i ...
- sql 模糊查询优化
在sql语句中使用 like模糊查询时,应该尽量避免%%,因为模糊查询是比较慢的,当出现这样的情况时,应该考虑优化. 举个例子:我在表中查询2012 年创建的记录 SELECT * FROM `com ...
- Oracle大字段(clob)模糊查询优化方法
对于内容很多的时候clob打字段模糊查询很慢,整理一个小方法: 1,在查询的列上建索引 2,对于要查询的clob字段使用一下语句创建索引 CREATE INDEX idx_zs_info_note ...
- MySQL的LIKE模糊查询优化
原文链接:https://www.cnblogs.com/whyat/p/10512797.html %xxx%这种方式对于数据量少的时候,我们倒可以随意用,但是数据量大的时候,我们就体验到了查询性能 ...
- 德哥PostgreSQL学习资料汇总(转)
文章来自:https://yq.aliyun.com/articles/59251?spm=5176.100239.bloglist.95.5S5P9S 德哥博客新地址:https://billtia ...
- mongoDB BI 分析利器 - PostgreSQL FDW (MongoDB Connector for BI)
背景 mongoDB是近几年迅速崛起的一种文档型数据库,广泛应用于对事务无要求,但是要求较好的开发灵活性,扩展弹性的领域,. 随着企业对数据挖掘需求的增加,用户可能会对存储在mongo中的数据有挖掘需 ...
随机推荐
- 信息搜集之google语法
总结的比较全,无耻的转了.D: http://blog.csdn.net/chaosa/article/details/1828301 说起Google,可谓无人不知无人不晓.作为世界第一的搜索引擎, ...
- java高级主题
1 java.util.concurrent.locks.LockSupport park:阻塞线程. unpark:解除阻塞线程. 线程阻塞最基础的组件. 2 sun.misc.Unsafe 可以用 ...
- iOS系统层次架构
本文转自:http://blog.csdn.net/lxl_815520/article/details/51172917 一,概述 iOS的系统架构分为四个层次:核心操作系统层(Core OS la ...
- js绑定键盘enter事件
js写法: document.onkeydown = function(event){ var event=document.all?window.event:event; if((event.key ...
- Django 之 admin组件使用&源码解析
admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 settings.py 中的 INSTALLED ...
- spring 注解管理
一.注解准备 1.xml引入新的约束,并开启注解扫描 context:component-scan标签开启注解扫描 2.导入注解有关jar包 二.注解创建对象 1.User类 @Component( ...
- emmet缩写格式
2016年5月30日 10:10 标准网页<!DOCTYPE html> <html lang="zh-CN"> <head> <meta ...
- js琐碎知识点
1.javascript发展史 javascript首先由Netscape设计,为改善浏览器用户体验,名为liveScript, 网景公司被sun公司收购,为了宣传改名为javascript 后来su ...
- CSS知识点 2
回顾: 浮动:是css中布局最多的一个属性 有浮动,一定要清除浮动浮动不是一个元素单独浮动,要浮动一起浮动 清除浮动四种方式:1.给父盒子添加高度,一般导航栏2.给浮动元素后面加一个空的块标签, 并 ...
- 【二叉堆】k路归并问题(BSOJ1941)
Description 有n个函数,分别为F1,F2,...,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci(x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复 ...