PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Rozmiar indeksu PostgreSQL i numer wartości

pg_table_size('index_name') dla indywidualnego indeksu - ale pokaże tylko rozmiar dysku, a nie ilość danych

count(*) aby uzyskać dokładną aktualną liczbę rzędów

sum(pg_column_size(column_name)) from table_name do szacowania ilości danych w kolumnie

możesz spróbować czegoś takiego:

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)

i aby sprawdzić, jak psql pobiera indywidualny rozmiar indeksu, uruchom go za pomocą psql -E ..

i jeszcze raz - funkcje powyżej działają z rozmiarem jaki zajmuje dysk - może/(może nie) ekstremalnie różnić się od rzeczywistej ilości danych. tutaj pomaga odkurzanie

aktualizacja Nie wiem, skąd bezpośrednio otrzymujesz liczbę "wierszy" w indeksie, dlatego mogę zaoferować tylko pośredni sposób. Np. pozwól mi mieć indeks częściowy, więc "liczba wierszy" różni się od tabeli. Mogę sprawdzić szacunki za pomocą EXPLAIN (oczywiście musisz powtórzyć w tym celu klauzulę where) sprawdzając rows=66800 w Index Only Scan using daje mi wyobrażenie o liczbie wierszy w tym indeksie (w rzeczywistości jest to rows=64910 które możesz uzyskać przez explain analyze lub po prostu uruchom count(*) ). Nie mogę znaleźć odpowiednich informacji w pg_stats - może jest jakaś formuła. Nie wiem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wycofanie po błędzie w transakcji

  2. Jak prawidłowo wstawić wiele wierszy do PG za pomocą węzła postgres?

  3. Jak utworzyć postgres do Oracle dblink?

  4. Węzeł wywołujący funkcję postgres z tabelami tymczasowymi powodującymi wyciek pamięci

  5. RangeError dla prostego przypisania liczb całkowitych w Rails 4.2.0, który powinien zostać przechwycony przez walidację