PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Taille et numéro de valeur de l'index PostgreSQL

pg_table_size('index_name') pour un index individuel - mais il ne vous montrera que la taille sur le disque, pas la quantité de données

count(*) pour obtenir le montage actuel exact des lignes

sum(pg_column_size(column_name)) from table_name pour les estimations sur la quantité de données de colonne

vous pouvez vous essayer à quelque chose comme :

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)

et pour vérifier comment psql obtient la taille de l'index individuel, exécutez-le avec psql -E ..

et encore une fois - les fonctions ci-dessus fonctionnent avec la taille qu'il faut du disque - cela peut/(peut ne pas) être extrêmement différent de la quantité réelle de données. passer l'aspirateur aide ici

mettre à jour Je ne sais pas où vous obtenez directement le nombre de "lignes" dans l'index, je ne peux donc offrir qu'une manière indirecte. Par exemple, permettez-moi d'avoir un index partiel, donc le "nombre de lignes" est différent de la table. Je peux vérifier les estimations avec EXPLAIN (bien sûr, vous devez répéter la clause where pour cela) en vérifiant les rows=66800 dans Index Only Scan using me donne une idée du nombre de lignes dans cet index (en fait c'est rows=64910 que vous pouvez obtenir en explain analyze ou simplement en exécutant count(*) ). Je ne trouve pas d'informations pertinentes dans pg_stats - il y a peut-être une formule. Je ne sais pas.