postgresql gin索引使用
由于属于老项目,postgresql使用版本9.6,主要解决‘%name%"查询无法使用索引问题。pg_trgm模块提供函数和操作符测定字母,数字,文本基于三元模型匹配的相似性, 还有支持快速搜索相似字符串的索引操作符类。
1. 增加pg_trgm拓展
CREATE EXTENSION pg_trgm;
2. 采用pg_trgm 建立gin索引
CREATE INDEX trgm_idx_users_username ON users USING gin (username gin_trgm_ops);
3. 第二步采用gin_trgm_ops建立索引完成,但对于联合索引,gin_trgm_ops将合并成一个字符串查询, 例如
CREATE INDEX trgm_idx_users_username ON users USING gin ((user_name|| ' ' || last_name) gin_trgm_ops);
4. 有时候需要建立联合索引,但同时不同的列不愿意合成一个字段,这个时候可以gin建立联合索引, 先修改默认pg_opclass
UPDATE pg_opclass SET opcdefault = TRUE WHERE opcname = 'gin_trgm_ops';
5. 建立gin索引, 示例使用"UPPER" 建立索引,主要是针对django 1.11不支持ilike搜索,全转为大写之后再建立索引,之后版本可取消“UPPER”
CREATE INDEX index_name ON table_name USING gin ( UPPER ( first_name ), UPPER ( last_name ), UPPER ( email ), UPPER(username));
6. 注意
gin联合索引占用空间比btree大,索引数量与列数有关,执行过程中会锁表,为不影响插入,修改等操作,可以使用CONCURRENTLY不锁表建立索引。
CREATE INDEX CONCURRENTLY index_name ON table_name USING gin ( UPPER ( first_name ), UPPER ( last_name ), UPPER ( email ), UPPER(username));
7. 使用一段时间后,发现gin索引存在无法命中的情况
1. 搜索字段少于3个字符时,不会命中索引,这是gin自身机制导致。
2. 当搜索字段过长时,比如email检索,可能也不会命中索引,造成原因暂时未知。
本文参考
gin 索引建立 : https://razeencheng.com/post/pg-like-index-optimize
安全操作postgresql: https://www.braintreepayments.com/blog/safe-operations-for-high-volume-postgresql/
postgresql gin索引使用的更多相关文章
- 浅谈postgresql的GIN索引(通用倒排索引)
1.倒排索引原理 倒排索引来源于搜索引擎的技术,可以说是搜索引擎的基石.正是有了倒排索引技术,搜索引擎才能有效率的进行数据库查找.删除等操作.在详细说明倒排索引之前,我们说一下与之相关的正排索引并与之 ...
- postgresql 创建gin索引
1.创建gin类型的索引 postgresql 创建gin索引遇到的问题:1.ERROR: operator class "gin_trgm_ops" does not exist ...
- 浅谈PostgreSQL的索引
1. 索引的特性 1.1 加快条件的检索的特性 当表数据量越来越大时查询速度会下降,在表的条件字段上使用索引,快速定位到可能满足条件的记录,不需要遍历所有记录. create table t(id i ...
- (转)浅谈PostgreSQL的索引
1. 索引的特性 1.1 加快条件的检索的特性 当表数据量越来越大时查询速度会下降,在表的条件字段上使用索引,快速定位到可能满足条件的记录,不需要遍历所有记录. create table t(id i ...
- gin索引优化实例1
GIN(Generalized Inverted Index, 通用倒排索引) 是一个存储对(key, posting list)集合的索引结构,其中key是一个键值,而posting list 是一 ...
- GIN 索引
GIN(Generalized Inverted Index, 通用倒排索引) 是一个存储对(key, posting list)集合的索引结构,其中key是一个键值,而posting list 是一 ...
- postgresql 创建索引:ERROR: operator class "gin_trgm_ops" does not exist for access method "gin"
g_trgm is an extension, so: CREATE EXTENSION pg_trgm; If you get the following error ERROR: could no ...
- PostgreSQL的索引选型
PostgreSQL里面给全文检索或者模糊查询加索引提速的时候,一般会有两个选项,一个是GIST类型,一个是GIN类型,官网给出的参考如下: There are substantial perform ...
- PostgreSQL的索引膨胀
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页 回到顶级页面:PostgreSQL索引页 索引膨胀,主要是针对B-tree而言. 索引膨 ...
随机推荐
- 【t002】jam的计数法
Time Limit: 1 second Memory Limit: 50 MB [问题描述] Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世 ...
- H3C DHCP服务器基本配置
- 程序员必备神器(FastStoneCapture)
工欲善其事,必先利其器. 作为程序员,如果我们不知道如何制作动态图或者快捷录屏.录视频等,会给人一种身怀不技的感觉:好!屁话少说,接下来我会废话连篇的介绍一款神器--------那就是FastSton ...
- Spring Boot实战之单元测试
Spring Boot实战之单元测试 本文介绍使用Spring测试框架提供的MockMvc对象,对Restful API进行单元测试 Spring测试框架提供MockMvc对象,可以在不需要客户端-服 ...
- CodeForces - 1186 C. Vus the Cossack and Strings (异或)
Vus the Cossack has two binary strings, that is, strings that consist only of "0" and &quo ...
- c3p0连接池封装
在处理数据库事物时需要同一个Connection 但是dbcp无法获得 单独工具也显得繁琐,改进成c3p0工具类: package utils; import java.sql.Connectio ...
- 曹工说Spring Boot源码(6)-- Spring怎么从xml文件里解析bean的
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- 第二阶段:1.流程图:11.PPT绘制页面流程图
产品经理主要绘制两个图:1.业务流程图(谁在什么条件下完成什么任务)2.页面流程图(具体到产品呈现的功能设计等等细节方面) 选择插入 选择流程图中的形状 设置两个矩形 同时添加不同的背景色 添加文本框 ...
- 从头学pytorch(九):模型构造
模型构造 nn.Module nn.Module是pytorch中提供的一个类,是所有神经网络模块的基类.我们自定义的模块要继承这个基类. import torch from torch import ...
- $Noip2018/Luogu5021$ 赛道修建 二分+树形
$Luogu$ $Sol$ 一直以为是每个点只能经过一次没想到居然是每条边只能经过一次$....$ 首先其实这题$55$分的部分分真的很好写啊,分别是链,数的直径和菊花图,这里就不详细说了. 使得修建 ...