pg_table_size('index_name')
cho chỉ mục riêng lẻ - nhưng nó sẽ chỉ hiển thị cho bạn kích thước trên đĩa chứ không phải số lượng dữ liệu
count(*)
để có được giá treo hàng chính xác hiện tại
sum(pg_column_size(column_name)) from table_name
để ước tính về lượng dữ liệu cột
bạn có thể thử cho mình những thứ như:
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)
và để kiểm tra cách psql lấy kích thước chỉ mục riêng lẻ, hãy chạy nó với psql -E
..
và một lần nữa - các hàm trên hoạt động với kích thước của đĩa - nó có thể / (có thể không) cực kỳ khác với lượng dữ liệu thực. hút bụi hữu ích ở đây
cập nhật Tôi không biết nơi bạn trực tiếp lấy số lượng "hàng" trong chỉ mục, do đó chỉ có thể đưa ra cách gián tiếp. Ví dụ:để tôi có chỉ mục một phần, vì vậy "số hàng" khác với bảng. Tôi có thể kiểm tra ước tính với EXPLAIN (tất nhiên bạn phải lặp lại mệnh đề where cho điều đó) kiểm tra rows=66800
trong Index Only Scan using
cho tôi ý tưởng về số hàng trong chỉ mục đó (thực tế là rows=64910
mà bạn có thể nhận được bằng cách explain analyze
hoặc chỉ chạy count(*)
). Tôi không thể tìm thấy thông tin liên quan trong pg_stats - có thể có một số công thức. Tôi không biết.