zoukankan      html  css  js  c++  java
  • postgresql索引类型

    索引查看

    SELECT  

    A.SCHEMANAME,  

    A.TABLENAME,  

    A.INDEXNAME,  

    A.TABLESPACE,  

    A.INDEXDEF,  

    B.AMNAME,  

    C.INDEXRELID,  

    C.INDNATTS,  

    C.INDISUNIQUE,  

    C.INDISPRIMARY,  

    C.INDISCLUSTERED,  

    D.DESCRIPTION  

    FROM  

    PG_AM B  

    LEFT JOIN PG_CLASS F ON B.OID = F.RELAM  

    LEFT JOIN PG_STAT_ALL_INDEXES E ON F.OID = E.INDEXRELID  

    LEFT JOIN PG_INDEX C ON E.INDEXRELID = C.INDEXRELID  

    LEFT OUTER JOIN PG_DESCRIPTION D ON C.INDEXRELID = D.OBJOID,  

    PG_INDEXES A  

    WHERE  

    A.SCHEMANAME = E.SCHEMANAME AND A.TABLENAME = E.RELNAME AND A.INDEXNAME = E.INDEXRELNAME  

    AND E.SCHEMANAME = 'public' AND E.RELNAME = 'obj4' ;

    索引类型及应用

    1、btree

    应用场景
    b-tree适合所有的数据类型,支持排序,支持大于、小于、等于、大于或等于、小于或等于的搜索。
    索引与递归查询结合,还能实现快速的稀疏检索。

    2、hash

    应用场景
    hash索引存储的是被索引字段VALUE的哈希值,只支持等值查询。

    hash索引特别适用于字段VALUE非常长(不适合b-tree索引,因为b-tree一个PAGE至少要存储3个ENTRY,所以不支持特别长的VALUE)的场景,例如很长的字符串,并且用户只需要等值搜索,建议使用hash index。

    3、gin 

    原理

    gin是倒排索引,存储被索引字段的VALUE或VALUE的元素,以及行号的list或tree。

    应用场景
    1、当需要搜索多值类型内的VALUE时,适合多值类型,例如数组、全文检索、TOKEN。(根据不同的类型,支持相交、包含、大于、在左边、在右边等搜索)

    2、当用户的数据比较稀疏时,如果要搜索某个VALUE的值,可以适应btree_gin支持普通btree支持的类型。(支持btree的操作符)

    3、当用户需要按任意列进行搜索时,gin支持多列展开单独建立索引域,同时支持内部多域索引的bitmapAnd, bitmapOr合并,快速的返回按任意列搜索请求的数据。

    create table t_gin1 (id int, arr int[]); 

    do language plpgsql $$
    declare
    begin
    for i in 1..10000 loop
    insert into t_gin1 select i, array(select random()*1000 from generate_series(1,10));
    end loop;
    end;
    $$;
    select * from t_gin1 limit 30;
    create index idx_t_gin1_1 on t_gin1 using gin (arr);
    select * from t_gin1 where arr && array[1,999];

      

    4、gist

    应用场景

    GiST是一个通用的索引接口,可以使用GiST实现b-tree, r-tree等索引结构。

    不同的类型,支持的索引检索也各不一样。例如:

    1、几何类型,支持位置搜索(包含、相交、在上下左右等),按距离排序。

    2、范围类型,支持位置搜索(包含、相交、在左右等)。

    3、IP类型,支持位置搜索(包含、相交、在左右等)。

    4、空间类型(PostGIS),支持位置搜索(包含、相交、在上下左右等),按距离排序。

    5、标量类型,支持按距离排序。

    5、sp-gist

    SP-GiST类似GiST,是一个通用的索引接口,但是SP-GIST使用了空间分区的方法,使得SP-GiST可以更好的支持非平衡数据结构,例如quad-trees, k-d tree, radis tree.

    应用场景

    1、几何类型,支持位置搜索(包含、相交、在上下左右等),按距离排序。

    2、范围类型,支持位置搜索(包含、相交、在左右等)。

    3、IP类型,支持位置搜索(包含、相交、在左右等)。

    6、brin

    7、rum

    8、bloom

    9、zombodb

    原理

    zombodb是PostgreSQL与ElasticSearch结合的一个索引接口,可以直接读写ES。

    https://github.com/zombodb/zombodb

    应用场景

    与ES结合,实现SQL接口的搜索引擎,实现数据的透明搜索。

    10、bitmap 

    原理

    bitmap索引是Greenplum的索引接口,类似GIN倒排,只是bitmap的KEY是列的值,VALUE是BIT(每个BIT对应一行),而不是行号list或tree。

    应用场景

    当某个字段的唯一值个数在100到10万之间(超出这个范围,不建议使用bitmap)时,如果表的记录数特别多,而且变更不频繁(或者是AO表),那么很适合BITMAP索引,bitmap索引可以实现快速的多个或单个VALUE的搜索。因为只需要对行号的BITMAP进行BIT与或运算,得到最终的BITMAP,从最终的BITMAP映射到行进行提取。

    bitmap与btree一样,都支持 等于,大于,小于,大于等于,小于等于的查询。

  • 相关阅读:
    subdomain takeover(子域名劫持)
    Kali linux UI missing close/minimize/maximize button
    vim比较多个文件内容
    vim多行缩进或缩出
    记一次centos8开机故障Internal error xfs XFS_WANT_CORRUPTED_GOTO
    Windows批处理(cmd/bat)常用命令小结
    git table无法自动补全问题
    git升级到指定版本
    linux 下find命令 --查找文件名
    Docker Nexus3 重置 admin 密码
  • 原文地址:https://www.cnblogs.com/lilei2blog/p/8649234.html
Copyright © 2011-2022 走看看