首页 > 解决方案 > 关于为 int 组合创建索引的建议。范围 + 整数 |Postgres

问题描述

我对下表的索引有疑问。

create table ascertain_telephonenumbersmodel
(

    id            serial                   not null
        constraint ascertain_telephonenumbersmodel_pkey
            primary key,

    abc_or_def    smallint                 not null
        constraint ascertain_telephonenumbersmodel_abc_or_def_check
            check (abc_or_def >= 0),

    numbers_range int4range                not null,

    volume        smallint                 not null
        constraint ascertain_telephonenumbersmodel_volume_check
            check (volume >= 0),

    operator      varchar(50)              not null,

    region        varchar(100)             not null,

    update_date   timestamp with time zone not null,

);

此表正在处理的唯一一种查询是

select
       *
from
     ascertain_telephonenumbersmodel
where
      abc_or_def=`some integer` and numbers_range @> `some integer`
      # example  abc_or_def=900 and numbers_range @> 2685856

问题是——为这种情况创建索引的最佳方法是什么?

数据库 – PostgreSQL 13

行数 ~ 400.000

当前执行时间 ~ 80-110 毫秒。

谢谢!

标签: postgresql

解决方案


复合主旨索引。您将需要使用扩展来将 int 包含在索引中。

create extension btree_gist;
create index on ascertain_telephonenumbersmodel using gist (abc_or_def, numbers_range);

推荐阅读