如何计算mysql表/数据库大小

时间:2016-12-19 10:25:48

标签: mysql

我很困惑。我必须估计表的大小以适应200万行。我不知道主要和次要索引占用了多少空间。特别是复合主要和次要指数。表的结构类似于

数据库引擎:innodb

create table abc(

a  int,
b  varchar(30),
c  char(10),
d  bigint(8),

FOREIGN KEY(a) 
        REFERENCES af(a_id) 
        ON DELETE RESTRICT
        ON UPDATE RESTRICT,
primary key(a,b,c)
)

CREATE UNIQUE INDEX idx_abc
  ON abc
    ( a ASC, d  ASC);

CREATE INDEX idx_abc2
  ON abc
    ( d );

请帮忙

鲜于

3 个答案:

答案 0 :(得分:0)

您可以使用此查询来显示表的大小(尽管您需要先替换变量):

或此查询列出每个数据库中每个表的大小,最大的第一个:

SELECT 
    table_name AS `Table`, 
    round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` 
FROM information_schema.TABLES 
WHERE table_schema = "$DB_NAME"
    AND table_name = "$TABLE_NAME";

答案 1 :(得分:0)

您可以使用 mysql.innodb_index_stats 获取数据/索引的大小。 警告,大小以页为单位=>您必须将它乘以通常为16K的页面大小。

答案 2 :(得分:0)

要进行精确估算,您需要创建表的副本并生成2 000 000个易失性数据,表示实际大小。与其他答案中显示的索引一起测量表格,然后知道答案,您可以删除副本。

如果精确度在您的情况下不那么重要,那么将记录占用的字节数与记录数相乘,并对索引执行相同操作。

记录* 2 000 000 +指数* 2 000 000~ = 50 * 2 000 000 + 60 * 2 000 000 = 110 * 2 000 000 = 22 000 000