sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLのインデックスサイズと値番号

    pg_table_size('index_name') 個々のインデックスの場合-ただし、データの量ではなく、ディスク上のサイズのみが表示されます

    count(*) 行の正確な現在のマウントを取得するには

    sum(pg_column_size(column_name)) from table_name 列データ量の見積もり用

    次のように自分で試してみることができます:

    t=# \di+ tbl*
                                        List of relations
     Schema |         Name         | Type  |  Owner   |     Table      |  Size  | Description
    --------+----------------------+-------+----------+----------------+--------+-------------
     public | tbl_pkey  | index | postgres | tbl | 156 MB |
     public | tbl_unpic | index | postgres | tbl | 46 MB  |
     public | tbl_x1    | index | postgres | tbl | 57 MB  |
    (3 rows)
    
    t=# \dt+ tbl
                            List of relations
     Schema |      Name      | Type  |  Owner   | Size  | Description
    --------+----------------+-------+----------+-------+-------------
     public | tbl | table | postgres | 78 MB |
    (1 row)
    
    t=# select pg_size_pretty(pg_total_relation_size('tbl'));
     pg_size_pretty
    ----------------
     337 MB
    (1 row)
    
    t=# select 78+57+46+156;
     ?column?
    ----------
          337
    (1 row)
    

    psqlが個々のインデックスサイズを取得する方法を確認するには、psql -Eを使用して実行します。 ..

    繰り返しになりますが、上記の関数はディスクにかかるサイズで機能しますが、実際のデータ量とは極端に異なる場合があります(そうでない場合もあります)。掃除機はここで役立ちます

    更新 インデックスの「行」の数をどこで直接取得するかはわかりません。したがって、間接的な方法しか提供できません。たとえば、部分インデックスを作成すると、「行数」はテーブルとは異なります。 EXPLAINを使用して見積もりを確認できます(もちろん、そのためにwhere句を繰り返す必要があります)rows=66800を確認します Index Only Scan using そのインデックスの行数についてのアイデアが得られます(実際にはrows=64910です) これはexplain analyzeで取得できます または、count(*)を実行するだけです )。 pg_statsに関連情報が見つかりません-おそらくいくつかの式があります。わかりません。



    1. DBDateTime文字列に挿入

    2. クラウドベンダーの詳細:DigitalOcean上のPostgreSQL

    3. SubstrとInstrを使用してOracleで文字列を抽出する

    4. jdbcの不明なデータベース