版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C
里认识PostgreSQL中与众不同的索引唐成中启乘数科技(杭州)有限公司联合创始人J里•索引总体介绍•
BRIN索引的例子•数组上建GIN索引的例子•快速查找某个IP是哪个地区•让like
'%XXX%'走索引•
GIN+JSON用户画像目录create
table
test01(id
int
primary
key,
k
int,t
text);
select
*
from
test01
order
by
k;create
unique
idx_test01_k
on
test01(k);中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商加速TUPLE排序*from
test01where
k=10;*from
test01where
k>100and
k<200;主键,
唯一约束索引的作用C
里云selectselect定位只能等值查询等值查询可能更快PG10之前,无法在主备之间同步WAL日志。块范围索引存储放在一个表的连续物理
块范围上的值摘要信息,如
最大值、最小值可以用于:
<、
<=、
=、
>=、
>不是一种索引类型,而是一种可以实现自定类型和策略的索引架构中包含了用于二维几何数据类型的GiST操作符类包含操作符:
@>图型没有重叠操作符号:
<<等值查询:
=、
IS
NULL,IN范围查询:
>、
<、
>=、
<=、
BETWEENAND、LIKE(开头匹配),
ILIKE
(大小写一致的字符开头匹配),~倒排索引,常用在全文检索中可高效地检测某值是否存在很多行中已实现了用于数组的GIN操作符类:
@>、
&&Hash索引BRIN索引GiST索引B-Tree索引GIN索引索引的分类:按算法分中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商C
里云CREATE
INDEX
idx_test01_part_kONtest01(k)where
k>1000and
k
<2000;索引的分类:其他分法表达式索引(函数索引)中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商部分索引多列索引唯一索引C
里云•
使用普通方式创建索引时,
PostgreSQL会锁定表以防止写入,在此过程中其他用户仍然可以读取表,但是DML等操作被一直阻塞,直到索引创建完毕。•
这在大多数的在线数据库中都是不可接受的行为。•
鉴于此,
PostgreSQL支持不长时间阻塞更新的情况下建立创建索引,•
这是通过在CREATE
INDEX中加CONCURRENTLY选项来实现的。•
当该选项被使用时,
PostgreSQL会执行表的两次扫描,因此该方法需要更
长一些的时间来建索引。尽管如此,这个选项也是很有用的一个功能。•
CREATE
INDEXCONCURRENTLY
idx_tab01_noteontesttab01(note);中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商
非阻塞式创建索引C
里云•
PG12版本之前:重建索引时不支持concurrently的参数•
可以在同样的列上用concurrently建一个不同名的新索引•
再删除旧索引非阻塞式重建索引中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商C
里云PCA(认证专员)PCP(认证专家)PCM(认证大师)PostgreSQL中文社区技术认证中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商请关注C
里云J里•
索引介绍•
BRIN索引的例子•数组上建GIN索引的例子•快速查找某个IP是哪个地区•让like
'%XXX%'走索引•
GIN+JSON用户画像目录•
createtabletest01(id
int,ttext);insert
intotest01(id,t)selectseq,
rpad('',50,'x')fromgenerate_series(1,3000000)ast(seq);•
create
index
idx_test01_k_brin_128ontest01
using
brin(id);•
create
index
idx_test01_k_brin_64ontest01
using
brin(id)with
(pages_per_range=64);•
create
index
idx_test01_k_brin_4ontest01
using
brin(id)with
(pages_per_range=4);•
create
index
idx_test01_k_btreeontest01(id);中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商
BRIN索引的例子C
里云pages_per_range不同值时BRIN索引通常在1MB以下,而普通索引为64M以
上中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商
BRIN索引的例子C
里云J里•
索引介绍•
BRIN索引的例子•数组上建GIN索引的例子•快速查找某个IP是哪个地区•让like
'%XXX%'走索引•
GIN+JSON用户画像目录•
联系人表:•CREATE
TABLE
contacts(•
id
int
primary
key,•
namevarchar(40),•
phonevarchar(32)[],
•address
text);数组上建GIN索引中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商C
里云•
insert
intocontactsselectseq,seq,
array[seq
seqfromgenerate_series(1,
500000,2)asseq;•
CREATE
INDEX
idx_contacts_phoneoncontacts
usinggin(phone);•
SELECT*
FROMcontactsWHERE
phone
@>
array[::varchar(32)];数组上建GIN索引中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商C
里云J里•
索引介绍•
BRIN索引的例子•数组上建GIN索引的例子•快速查找某个IP是哪个地区•让like
'%XXX%'走索引•
GIN+JSON用户画像目录快速查找某个IP是哪个地区的普通做法
-J8里•
假设我们有一张表,记录了IP地址范围对应的地区,给一个公网IP,就可以查询出这个ip地址在那个地区createtable
ipdb1(id
int,ip_begin
inet,ip_end
inet,areatext,sp
text);中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商快速查找某个IP是哪个地区的普通做法
-J8里•给一个公网IP,查出在那个地区的SQL为:select*from
ipdb1where
'14'>=ip_beginand
'14'
<=ip_end;•
上面的SQL是全表扫描,
CPU占用高•
改进:加索引•
create
index
idx_ipdb1_ip_beginon
ipdb1(ip_begin);•
再加一个索引:•
create
index
idx_ipdb1_ip_endon
ipdb1(ip_end);•但还是索引范围扫描,占用资源多中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商•CREATETYPE
inetrangeAS
RANGE
(•
subtype
=
inet•);•CREATETABLE
ipdb2
(•
id
integer
NOT
NULL,•
ip_range
inetrange,•
areatext,•
sp
text•);•CREATE
INDEX
idx_ipdb2_ip_rangeON
ipdb2
USINGgist
(ip_range);•select*from
ipdb2where
ip_range
@>
'14'::inet;快速查找某个IP是哪个地区的终极解决方案
-J8
里中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商J里•
索引介绍•
BRIN索引的例子•数组上建GIN索引的例子•快速查找某个IP是哪个地区•让like
'%XXX%'走索引•
GIN+JSON用户画像目录like
'%xxx%'走索引的方法
-J8里•
createtabletest01(id
int,ttext);•
insert
intotest01selectseq,seq
from
generate_series(1,
1000000)as
seq;•analyze
test01;•
explainanalyzeselect*fromtest01where
t
like
'%99999%';•需要100~300毫秒,走全表扫描中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商•
createextension
pg_trgm;•
create
index
idx_test01_tontest01
usinggin(t
gin_trgm_ops);•现在走了索引,只需要2毫秒,like
'%xxx%'走索引的方法中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商C
里云like
'%xxx%'走索引的方法中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商C
里云J里•
索引介绍•
BRIN索引的例子•数组上建GIN索引的例子•快速查找某个IP是哪个地区•让like
'%XXX%'走索引•
GIN+JSON用户画像目录•标签模型•
职业:农民、工人、
IT工程师、理发师、医生、老师、美工、律师、公务员、官员•
爱好:游泳、乒乓球、羽毛球、网球、爬山、高尔夫球、滑雪、爬山、旅游•
学历:无学历、小学、初中、高中、中专、专科、本科、硕士、博士•
性格:外向、内向、谨慎、稳重、细心、粗心、浮躁、自信中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商用户画像系统C
里云•
建表•
CREATETABLE
user_tag(uidserial
primary
key,tag
jsonb);•
uid表示用户ID,•
tag字段中放了用户的所有标签,
tag字段类型为jsonb。中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商用户画像系统C
里云•造数据CREATEOR
REPLACE
FUNCTIONf_random_attr(attrtext[],
max_attr
int)
RETURNStext[]AS
$$DECLAREi
integer
:=
0;
r
integer
:=
0;
restext[];vtext;l
integer;num
integer;BEGINnum:=
(random()*max_attr)::int;IF
num
<
1THENnum
:=
1;END
IF;l:=
array_length(attr,
1);WHILE
i
<
num
LOOPr:=
round(random()*l)::int
+
1;v
:=
attr[r];IF
res
@>array[v]THENcontinue;ELSEres:=array_append(res,v);i
:=
i
+
1;END
IF;END
LOOP;return
res;END;$$
LANGUAGEplpgsql;中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商用户画像系统C
里云•造数据(续)INSERT
INTO
user_tag(uid,tag)SELECT
seq,json_build_object('职业',f_random_attr(array['农民','工人','IT工程师','理发师','医生','老师','美工','律师','公务员','官员'],
1),'爱好',f_random_attr(array['游泳','乒乓球','羽毛球','网球','爬山','高尔夫球','滑雪','爬山','旅游'],
5),
'学历',f_random_attr(array['无学历','小学','初中','高中','中专','专科','本科','硕士','博士'],
1),
'性格',f_random_attr(array['外向','内向','谨慎','稳重','细心','粗心','浮躁','自信'],
3))::jsonbFROM
generate_series(1,
100000)as
t(seq);中启乘数科技:阿里云合作伙伴,专业的数据库服务提供商用户画像系统C
里云•
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宿舍内务卫生考勤制度
- 商场商户指纹考勤制度
- 小学学生每课考勤制度
- 宾馆考勤制度管理规定
- 工程项目部指纹考勤制度
- 平安工地考勤制度规定
- 公司基本工资及考勤制度
- 店面员工打卡考勤制度
- 2026年能源储备管理专干考试题库及答案
- 2026年内分泌科诊疗规范考试试题及答案
- 2026年一年级下学期语文教学工作计划2篇
- 2024南皮辅警考试真题及答案
- JJG34-2022指示表检定规程
- 2025年湖南省事业单位联考真题试卷 公共基础知识附答案详解(完整版)
- 人工智能通识 课件 唐志航 第1-8章 人工智能发展简史- 办公软件实战应用
- 2025年驾照满分学习题库及答案
- 猪场建设施工合同范本
- 公墓管理员中级面试问题
- 中国持续葡萄糖监测临床应用指南(2025年版)
- 多智能体深度强化学习通信机制综述
- 复工复产安全培训考试题
评论
0/150
提交评论