文档中心MogDBMogDB StackUqbar
v5.0

文档:v5.0

支持的版本:

其他版本:

BTree索引压缩

可获得性

本特性自MogDB 3.1.0版本开始引入。

特性简介

BTree索引压缩特性是一种通过对索引数据进行去重压缩的技术。它能够减少索引数据在内存中的占用空间,并且可以一次性加载更多的索引数据。

image

客户价值

使用BTree索引存储结构和内存压缩可以提供很多优势,以满足系统业务对于高效数据查询的需求。以下是这一特性的几个主要优点:

  • 提高数据查询速度:BTree索引是一种高效的索引结构,可以提供快速的数据查找和访问。通过对索引数据进行压缩,可以减少索引数据的大小,从而加快查询速度。压缩后的索引数据可以更快地加载到内存中,并且减少内存访问的成本。

  • 降低存储空间占用:索引数据通常会占用大量的存储空间。通过压缩索引数据,可以减少存储空间的占用。较小的索引数据尺寸也意味着更少的磁盘IO操作和更少的网络传输开销。

  • 提升系统的整体性能:通过减少内存占用和磁盘IO操作,BTree索引压缩特性可以显著提升系统的整体性能。数据查询速度的提高和存储空间的节省可以加快系统的响应时间,提高用户体验。此外,减少IO操作还可以降低系统的负载,提高系统的稳定性和可靠性。

总之,使用BTree索引存储结构和内存压缩可以优化索引数据的存储和查询效率,提高数据查询速度、降低存储空间占用,并提升系统的整体性能。这对于满足系统业务对高效数据查询的需求非常有益。

特性描述

采用BTree索引存储结构,并将索引数据进行压缩存储于内存中,可以进一步提高查询效率。

当一个列或多个列存在大量重复数据时,索引的创建和索引数据的去重压缩尤为重要。通过去重压缩,可以减少索引数据的大小,节省存储空间,并且更快地加载索引数据到内存中。

同时,本特性也支持非唯一索引数据的去重压缩处理。对于非唯一索引,去重压缩可以进一步减少存储空间的占用,加快查询速度。对于唯一索引,尽管没有压缩效果,但仍然可以享受其他优势,如快速的数据查找和访问。

综上所述,本特性通过BTree索引存储结构和索引数据的压缩存储于内存中,可以加速数据查询效率,并特别适用于存在大量重复数据的索引创建和索引数据去重压缩的情况。无论是非唯一索引还是唯一索引,都可以从这一特性中获益。

特性约束

  • 不支持include index类型索引
  • 不支持系统表索引
  • 只支持BTree索引类型

示例

  1. 创建数据表。

    -- 创建普通表table
    CREATE TABLE mogdb_index_compression_table_01
    (
            seq int,
            id int,
            a  text,
            b  text,
            c  timestamp
    );
  2. 创建索引,指定compression压缩参数。

    -- 创建btree压缩索引,默认不指定compression参数,索引压缩属性处于关闭状态
    CREATE INDEX idx_single_col_01 ON mogdb_index_compression_table_01(a) WITH (compression =yes);
    CREATE INDEX idx_multi_col_01 ON mogdb_index_compression_table_01(id,a) WITH (compression =yes);
    
    -- 同一张数据table,相同的索引属性列,创建btree索引,压缩属性处于default关闭状态,用于对比压缩空间缩减效果
    CREATE INDEX idx_single_col_02 ON mogdb_index_compression_table_01(a);
    CREATE INDEX idx_multi_col_02 ON mogdb_index_compression_table_01(id,a);
    
    -- catalog系统表查看索引压缩开关信息
    MogDB =# SELECT * FROM pg_indexes WHERE tablename = 'mogdb_index_compression_table_01';
     schemaname |            tablename             |     indexname     | tablespace |                                                              indexdef
    ------------+----------------------------------+-------------------+------------+-----------------------------------------------------------------------------------------------------------------------
    -------------
     public     | mogdb_index_compression_table_01 | idx_single_col_01 |            | CREATE INDEX idx_single_col_01 ON mogdb_index_compression_table_01 USING btree (a) WITH (compression =yes) TABLESPACE p
    g_default
     public     | mogdb_index_compression_table_01 | idx_multi_col_01  |            | CREATE INDEX idx_multi_col_01 ON mogdb_index_compression_table_01 USING btree (id, a) WITH (compression =yes) TABLESPAC
    E pg_default
     public     | mogdb_index_compression_table_01 | idx_single_col_02 |            | CREATE INDEX idx_single_col_02 ON mogdb_index_compression_table_01 USING btree (a) TABLESPACE pg_default
     public     | mogdb_index_compression_table_01 | idx_multi_col_02  |            | CREATE INDEX idx_multi_col_02 ON mogdb_index_compression_table_01 USING btree (id, a) TABLESPACE pg_default
    ( 4 rows)
    MogDB =# SELECT relname,reloptions FROM pg_class WHERE relname = 'idx_single_col_01';
          relname      |    reloptions
    -------------------+-------------------
     idx_single_col_01 | {compression =yes}
    ( 1 row)
    MogDB =# SELECT relname,reloptions FROM pg_class WHERE relname = 'idx_multi_col_01';
         relname      |    reloptions
    ------------------+-------------------
     idx_multi_col_01 | {compression =yes}
    ( 1 row)
  3. 构建随机数据插入到数据表中。

    -- 插入数据
    INSERT INTO mogdb_index_compression_table_01
    SELECT seqno,
    seqno % 20,
    md5((random() * 20):: INTEGER::text),
    md5(random()::text),
    tt
    FROM generate_series( 1, 1000) AS seqno,
    generate_series(now(),now() + '1 week', '1 day') AS tt;
    
    -- 查看数据表中的插入数据
    MogDB =# SELECT * FROM mogdb_index_compression_table_01 LIMIT 15;
     seq | id |                a                 |                b                 |             c
    -----+----+----------------------------------+----------------------------------+----------------------------
       1 |  1 | c4ca4238a0b923820dcc509a6f75849b | d5e055cf4a50c7f2790bacae0685108c | 2023 -05 -25 16: 12: 46.776094
       1 |  1 | 6512bd43d9caa6e02c990b0a82652dca | 59124424a2bb70cba5cd9495912c6f3f | 2023 -05 -26 16: 12: 46.776094
       1 |  1 | 1679091c5a880faf6fb5e6087eb1b2dc | 8b49e1ccec21c9fc2bfb08dfbea85995 | 2023 -05 -27 16: 12: 46.776094
       1 |  1 | 1679091c5a880faf6fb5e6087eb1b2dc | 0b1660223cd7777ef587b535b913ce5a | 2023 -05 -28 16: 12: 46.776094
       1 |  1 | 45c48cce2e2d7fbdea1afc51c7c6ad26 | 1b9abe418c57bdcee01ee66415cf07de | 2023 -05 -29 16: 12: 46.776094
       1 |  1 | c4ca4238a0b923820dcc509a6f75849b | d60b4db2e8390bc96887f944be6af3e8 | 2023 -05 -30 16: 12: 46.776094
       1 |  1 | c20ad4d76fe97759aa27a0c99bff6710 | 7e1d2447ed0f40c4d77f163c925361b1 | 2023 -05 -31 16: 12: 46.776094
       1 |  1 | cfcd208495d565ef66e7dff9f98764da | 1c4c7d26e8e04643051da09f32425ce9 | 2023 -06 -01 16: 12: 46.776094
       2 |  2 | c51ce410c124a10e0db5e4b97fc2af39 | 7c330d7e0940db58c56b6c2a48618d91 | 2023 -05 -25 16: 12: 46.776094
       2 |  2 | 6f4922f45568161a8cdf4ad2299f6d23 | 5cba36cfee55985bef28e77cd95be9f6 | 2023 -05 -26 16: 12: 46.776094
       2 |  2 | d3d9446802a44259755d38e6d163e820 | 6e94dde54130dedd4166adde26a47ff7 | 2023 -05 -27 16: 12: 46.776094
       2 |  2 | a87ff679a2f3e71d9181a67b7542122c | f834dd99d9e24eb2f8fde50560f73679 | 2023 -05 -28 16: 12: 46.776094
       2 |  2 | c4ca4238a0b923820dcc509a6f75849b | d3ebea8e5ee091eba9fbb458bee90d15 | 2023 -05 -29 16: 12: 46.776094
       2 |  2 | 8f14e45fceea167a5a36dedd4bea2543 | 681df81facbf975107287365d7c2b568 | 2023 -05 -30 16: 12: 46.776094
       2 |  2 | aab3238922bcc25a6f606eb525ffdc56 | c5b256a5aa07c723df488a432147b39e | 2023 -05 -31 16: 12: 46.776094
    ( 15 rows)
  4. 查看压缩和非压缩索引文件大小。

    -- 查看数据文件大小和索引文件大小,由于是随机数据,文件大小可能和实例不同,主要关注非压缩和压缩场景下索引文件大小变化情况
    -- 1. 查看数据文件大小
    MogDB =# SELECT pg_size_pretty(pg_relation_size( 'mogdb_index_compression_table_01'));
     pg_size_pretty
    ----------------
      920 kB
    ( 1 row)
    
    -- 2.查看单列索引非压缩场景文件大小
    MogDB =# SELECT pg_size_pretty(pg_relation_size( 'idx_single_col_02'));
     pg_size_pretty
    ----------------
      504 kB
    ( 1 row)
    
    -- 3.查看单列索引压缩场景文件大小
    MogDB =# SELECT pg_size_pretty(pg_relation_size( 'idx_single_col_01'));
     pg_size_pretty
    ----------------
      88 kB
    ( 1 row)
    
    -- 4.查看多列组合索引非压缩场景文件大小
    MogDB =# SELECT pg_size_pretty(pg_relation_size( 'idx_multi_col_02'));
     pg_size_pretty
    ----------------
      600 kB
    ( 1 row)
    
    -- 5.查看多列组合索引压缩场景文件大小
    MogDB =# SELECT pg_size_pretty(pg_relation_size( 'idx_multi_col_01'));
     pg_size_pretty
    ----------------
      120 kB
    ( 1 row)
    
    -- 其他方式直接查看对比
    MogDB =# \d +
                                                       List of relations
     Schema |               Name               | Type  |  Owner   |  Size  |             Storage              | Description
    --------+----------------------------------+-------+----------+--------+----------------------------------+-------------
     public | mogdb_index_compression_table_01 | table | xyhmogdb | 952 kB | {orientation = row,compression = no} |
    ( 1 row)
    MogDB =# \di +
                                                          List of relations
     Schema |       Name        | Type  |  Owner   |              Table               |  Size  |      Storage      | Description
    --------+-------------------+-------+----------+----------------------------------+--------+-------------------+-------------
     public | idx_multi_col_01  | index | xyhmogdb | mogdb_index_compression_table_01 | 120 kB | {compression =yes} |
     public | idx_multi_col_02  | index | xyhmogdb | mogdb_index_compression_table_01 | 600 kB |                   |
     public | idx_single_col_01 | index | xyhmogdb | mogdb_index_compression_table_01 | 88 kB  | {compression =yes} |
     public | idx_single_col_02 | index | xyhmogdb | mogdb_index_compression_table_01 | 504 kB |                   |
    ( 4 rows)

相关页面

CREATE INDEX

Copyright © 2011-2024 www.enmotech.com All rights reserved.