【问题标题】:Amount of data in database for certain field (column)数据库中特定字段(列)的数据量
【发布时间】:2012-01-23 19:24:09
【问题描述】:

是否可以在 mysql 或任何其他 db 中的一个字段(列)中获取有关数据量的信息?

【问题讨论】:

  • 什么样的信息?使用的存储空间?行数?平均值?
  • 什么样的字段?大多数字段都有与其数据类型相关的大小。
  • “数据量”是什么意思?一个表占用多少字节?或者有多少行?还是……?
  • 表示存储空间

标签: mysql database postgresql


【解决方案1】:

整个表的实际列对磁盘空间的要求通常很难确定。这取决于许多因素。

特别是关于PostgreSQL

  • 其中一个因素是数据对齐。我在related answer 中写了更多关于此的内容。

  • 另一个是压缩。超过几十个字节的文本将是toasted。 IE。压缩并存储在单独的 TOAST 表中。

  • 索引增加了总空间需求。

举例回答

为此,我使用了一个名为location 的包含 21k 个位置的真实生活表。它有 20 列,但 name 是最大的一列。为了演示表带来的开销,我创建了一个临时表,其中只有一列 name。 (临时表的开销与普通表的开销基本相同 - 我测试过。)

CREATE TEMP TABLE x AS SELECT name FROM location;

然后我使用了一些 PostgreSQL 的database object size functions 来创建这个演示:

SELECT pg_size_pretty(pg_table_size('loc'::regclass)) AS tbl_size
      ,pg_size_pretty(pg_relation_size('loc'::regclass)) AS rel_size
      ,(SELECT pg_size_pretty(sum(pg_column_size(loc))) from loc) AS sum_col_size

      ,pg_size_pretty(pg_table_size('x'::regclass)) AS tbl_size
      ,pg_size_pretty(pg_relation_size('x'::regclass)) AS rel_size
      ,(SELECT pg_size_pretty(sum(pg_column_size(loc))) from x) AS sum_col_size

结果:

tbl_size | rel_size | sum_col_size | x_tbl_size | x_rel_size | x_sum_col_size
---------+----------+--------------+------------+------------+---------------
3160 kB  | 3128 kB  | 432 kB       | 1104 kB    | 1096 kB    | 432 kB

但也许我过度解释了这个问题,而您只想要基本数据类型的存储大小?这在精美手册here 的每一章中都有列出。

【讨论】:

    【解决方案2】:

    如果是varchar 类型,这将告诉您该列使用的字节数:

    select sum(length(column_name)) + count(*) as total_bytes from table_name;
    

    对于varchar,每行添加1个字节(即添加count(*))。


    如果是char,只需将 count(*) 乘以列宽即可。

    【讨论】:

      猜你喜欢
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      相关资源
      最近更新 更多