是否可以在mysql或任何其他数据库中的一个字段(列)中获取有关数据量的信息?
答案 0 :(得分:2)
通常很难确定整个表格列的实际光盘空间要求。这取决于许多因素。
其中一个因素是数据对齐。我在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(*)乘以列宽。