インデックスの統計を取得しようとしています。インデックスとそのサイズの合計値を探しています。
テーブルのすべてのインデックスのサイズしかわかりません。テーブルpg_class列のrelpagesおよびreltuplesは、特定のインデックスレベルではなく、テーブルの値を示します。
さらに、関数pg_indexes_sizeはテーブル名を引数として取り、そのテーブルの合計インデックスサイズを返します。
インデックスレベルでサイズと行番号を取得する方法はありますか? PostgreSQL 9.3を使用しています。
あなたの助けを事前にありがとう
個々のインデックスのpg_table_size('index_name')
-データの量ではなく、ディスク上のサイズのみを表示します
count(1)
は、行の正確な現在のマウントを取得します
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
を指定して実行します。
もう一度-上記の関数はディスクのサイズで機能します-実際のデータ量とは非常に異なる場合があります。掃除機はここに役立ちます
pdateインデックスの「行」の数を直接取得する場所がわからないため、間接的な方法しか提供できません。たとえば、部分的なインデックスを作成すると、「行数」がテーブルとは異なります。 EXPLAINで推定を確認できます(もちろん、そのためにwhere句を繰り返す必要があります)rows=66800
のIndex Only Scan using
を確認すると、そのインデックスの行数がわかります(実際には、rows=64910
で取得できるexplain analyze
か、またはcount(1)
)。 pg_statsで関連情報を見つけることができません-たぶんいくつかの式があります...