0
点赞
收藏
分享

微信扫一扫

PG gin 索引使用

路西法阁下 2022-07-13 阅读 65


gin 索引性能测试

使用 字符串保存标签列表,以 逗号 分隔

构造数据

drop table tbl_user;
CREATE TABLE public.tbl_user(
ID SERIAL PRIMARY KEY NOT NULL,
UserID varchar(100) NOT NULL,
UserName varchar(100) NOT NULL,
PhoneNumber varchar(20) NOT NULL
);


INSERT INTO public."tbl_user" (userid, username, phonenumber)
select
n ,
((n%100))||'name,'||((n%100+1))||'name,'||((n%100+2))||'name,'||((n%100+3))||'name,'||((n%100+4))||'name,'||((n%100+5))||'name,'||((n%100+6))||'name,'|| ((n%100+7))||'name,'||((n%100+8))||'name,'||((n%100+9))||'name',
random()
from generate_series(1,1000000)n;
--create index idx_tbl_user_username on tbl_user using btree(username);
create extension pg_trgm;
create index idx_tbl_user_username on tbl_user using gin(username gin_trgm_ops);
Planning Time: 0.213 ms
Execution Time: 2095.709 ms



explain (timing, verbose, analyse, buffers, costs,timing)
select * from tbl_user where username ~'6name|7name|100name';

Planning Time: 0.326 ms
Execution Time: 1929.220 ms

使用 varchar 数组保存 标签列表

drop table if exists tbl_user2;
create table if not exists tbl_user2(id int, name text, phone_number_list text[]);
set maintenance_work_mem to '2GB';

insert into tbl_user2
select n , n||'name' , array[
(n%((random()*99)::INT+1))::text||'phone',
(n%((random()*98)::INT+2))::text||'phone',
(n%((random()*97)::INT+3))::text||'phone',
(n%((random()*96)::INT+4))::text||'phone',
(n%((random()*95)::INT+5))::text||'phone',
(n%((random()*94)::INT+6))::text||'phone',
(n%((random()*93)::INT+7))::text||'phone',
(n%((random()*92)::INT+8))::text||'phone',
(n%((random()*91)::INT+9))::text||'phone',
(n%((random()*90)::INT+10))::text||'phone'
]
from generate_series(1,1000000) n;
create index idx_tbl_user2_parent_label_name on tbl_user2 using gin(phone_number_list);
Planning Time: 0.065 ms
Execution Time: 17.456 ms


举报

相关推荐

0 条评论