某些字段(列)的数据库中的数据量

时间:2012-01-23 19:24:09

标签: mysql database postgresql

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

2 个答案:

答案 0 :(得分:2)

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

特别关于 PostgreSQL

  • 其中一个因素是数据对齐。我在related answer

  • 中写了更多相关信息
  • 另一个是压缩。长度超过几十个字节的文本将为toasted。即压缩并存储在单独的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中的每一章都列出。

答案 1 :(得分:0)

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

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

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


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