web-dev-qa-db-ja.com

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

インデックスの統計を取得しようとしています。インデックスとそのサイズの合計値を探しています。

テーブルのすべてのインデックスのサイズしかわかりません。テーブルpg_class列のrelpagesおよびreltuplesは、特定のインデックスレベルではなく、テーブルの値を示します。

さらに、関数pg_indexes_sizeはテーブル名を引数として取り、そのテーブルの合計インデックスサイズを返します。

インデックスレベルでサイズと行番号を取得する方法はありますか? PostgreSQL 9.3を使用しています。

あなたの助けを事前にありがとう

8
oved_s

個々のインデックスの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=66800Index Only Scan usingを確認すると、そのインデックスの行数がわかります(実際には、rows=64910で取得できるexplain analyzeか、またはcount(1))。 pg_statsで関連情報を見つけることができません-たぶんいくつかの式があります...

14
Vao Tsun