Mysql查看数据库和表占用空间

Mysql查看数据库和表占用空间

1、查看数据库的大小

select sum(DATA_LENGTH)+sum(INDEX_LENGTH) from information_schema.TABLES where TABLE_SCHEMA='数据库名';

结果是以字节为单位,除(1024*1024)为M。

mysql> select sum(DATA_LENGTH)+sum(INDEX_LENGTH) as 'hellodb_use_Total(bytes)' from information_schema.TABLES where TABLE_SCHEMA='hellodb';

+--------------------------+

| hellodb_use_Total(bytes) |

+--------------------------+

|                   262144 |

+--------------------------+

1 row in set (0.00 sec

2concat()函数:联合字段

mysql> select concat(10,' Mb') as Lenge;

+-------+

| Lenge |

+-------+

| 10 Mb |

+-------+

1 row in set (0.00 sec)

3ROUND()函数

ROUND函数用于把数值字段舍入为指定的小数位数。语法如下:

SELECT ROUND(column_name,decimals) FROM table_name

column_name        必需,要舍入的字段

decimals              必需,要返回的小数位数

mysql> select round(10.1234,2) as '10.231';

+--------+

| 10.231 |

+--------+

|  10.12 |

+--------+

1 row in set (0.00 sec)

mysql> select round(10.1234,0) as '10.231';

+--------+

| 10.231 |

+--------+

|     10 |

+--------+

1 row in set (0.00 sec)

4truncate(X,D)函数:截取字段函数

X算数操作;D截取字段,D小于0,将小数点前|D|位置零;D大于0,截取小数点后D位;

truncate()函数用法示例

mysql> SELECT TRUNCATE(1.223343*100,2);

+--------------------------+

| TRUNCATE(1.223343*100,2) |

+--------------------------+

|                   122.33 |

+--------------------------+

1 row in set (0.00 sec)

mysql> SELECT TRUNCATE(1.223343*100,0);

+--------------------------+

| TRUNCATE(1.223343*100,0) |

+--------------------------+

|                      122 |

+--------------------------+

1 row in set (0.00 sec)

mysql> SELECT TRUNCATE(1.223343*100,-1);

+---------------------------+

| TRUNCATE(1.223343*100,-1) |

+---------------------------+

|                       120 |

+---------------------------+

1 row in set (0.03 sec)

mysql> SELECT TRUNCATE(1.223343*100,-2);

+---------------------------+

| TRUNCATE(1.223343*100,-2) |

+---------------------------+

|                       100 |

+---------------------------+

1 row in set (0.00 sec)

示例:查询数据库占用多少G

select concat(truncate((sum(DATA_LENGTH)+sum(INDEX_LENGTH) )/1024/1024/1024,2) ,' G') from information_schema.TABLES where TABLE_SCHEMA=’数据库名’;

5information_schema 数据库中的TABLES 表参数说明

mysql> use information_schema

Database changed

information_schema库中的tables表字段如下:

mysql> select * from TABLES limit 71,3;

+---------------+--------------+----------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+-----------------------------+

| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME     | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH | MAX_DATA_LENGTH | INDEX_LENGTH | DATA_FREE | AUTO_INCREMENT | CREATE_TIME         | UPDATE_TIME         | CHECK_TIME | TABLE_COLLATION   | CHECKSUM | CREATE_OPTIONS | TABLE_COMMENT               |

+---------------+--------------+----------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+-----------------------------+

| NULL          | mysql        | user           | BASE TABLE | MyISAM |      10 | Dynamic    |          7 |             81 |         572 | 281474976710655 |         2048 |         0 |           NULL | 2017-11-26 17:19:46 | 2018-06-08 21:45:38 | NULL       | utf8_bin          |     NULL |                | Users and global privileges |

| NULL          | smp11        | mcn_user_major | BASE TABLE | InnoDB |      10 | Compact    |          0 |              0 |       16384 |               0 |        16384 |         0 |           NULL | 2018-06-10 20:40:45 | NULL                | NULL       | latin1_swedish_ci |     NULL |                |                             |

| NULL          | testslave    | id             | BASE TABLE | InnoDB |      10 | Compact    |          2 |           8192 |       16384 |               0 |            0 |         0 |           NULL | 2017-11-26 17:37:17 | NULL                | NULL       | latin1_swedish_ci |     NULL |                |                             |

+---------------+--------------+----------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+-----------------------------+

3 rows in set (0.05 sec)

MySQL的 information_schema 数据库中的TABLES 表记录了MySQL数据库中每个表占用的空间、表记录的行数,更新时间,说明等,这个表主要字段如下:

TABLE_SCHEMA : 数据库名

TABLE_NAME:表名

ENGINE:所使用的存储引擎

TABLES_ROWS:记录数,即表的行数

DATA_LENGTH:数据大小

INDEX_LENGTH:索引大小

CREATE_TIME:创建时间

UPDATE_TIME:最近更新时间

DATA_FREE:如果是共享表空间,该字段表示共享表空间的大小而非数据的大小。只有使用独占表空间时,该字段才表示该表的剩余空间;

说明:该参数与mysql碎片有关,当MySQL从列表中删除一行内容,该段空间就会被留空。在一段时间内执行大量删除操作后,往往会使留空的空间变得比存储列表内容所使用的空间更大。

通俗的讲:Data_free字段即为多占的物理空间,通过‘show table status’可以查看指定表的Data_free字段,对应的值就是多占用的物理空间,当drop表重建或重新导入可以释放这部分空间。

此时可以使用optimize整理表的碎片:

注意:该操作执行的时候会把该表格先写入一个tmp临时表,所以磁盘剩余空间必须大于 表空间,否则会执行失败。mysql> optimize table classes,students;

5.6.X以前的版本会提示该表不支持optimize,5.6.X的版本已经支持Innodb了。

6、查询一个表或库占用总的空间的大小

使用sum(数据大小)+sum(索引大小) 即可,SQL如下:

1)、查询库

select TABLE_SCHEMA,sum(DATA_LENGTH)+sum(INDEX_LENGTH) as use_total ,TABLE_ROWS FROM information_schema.TABLES where TABLE_SCHEMA='数据库名'

mysql> select TABLE_SCHEMA,sum(DATA_LENGTH)+sum(INDEX_LENGTH) FROM information_schema.TABLES where TABLE_SCHEMA='hellodb';

+--------------+------------------------------------+

| TABLE_SCHEMA | sum(DATA_LENGTH)+sum(INDEX_LENGTH) |

+--------------+------------------------------------+

| hellodb      |                             262144 |

+--------------+------------------------------------+

1 row in set (0.02 sec)

2)、查询表

select TABLE_NAME,DATA_LENGTH+INDEX_LENGTH,TABLE_ROWS FROM information_schema.TABLES where TABLE_SCHEMA='数据库名' and TABLE_NAME='表名'

mysql> select TABLE_NAME,DATA_LENGTH+INDEX_LENGTH,TABLE_ROWS FROM information_schema.TABLES where TABLE_SCHEMA='hellodb' and TABLE_NAME='classes';

+------------+--------------------------+------------+

| TABLE_NAME | DATA_LENGTH+INDEX_LENGTH | TABLE_ROWS |

+------------+--------------------------+------------+

| classes    |                    16384 |          8 |

+------------+--------------------------+------------+

1 row in set (0.00 sec)

7、查看表的最后更新时间

select TABLE_NAME,UPDATE_TIME from information_schema.TABLES where TABLE_SCHEMA='数据库名';

可以通过查看数据库中表的更新时间,确定mysql数据库是使用情况。

8、案例:修改指定数据库名即可查看表格占用空间

案例1

数据库所占磁盘空间,查询所有数据库占用磁盘空间大小的SQL语句如下:

mysql> select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size,

    -> concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_size

    -> from information_schema.tables

    -> group by TABLE_SCHEMA

    -> order by data_length desc;

+--------------------+-----------+------------+

| TABLE_SCHEMA       | data_size | index_size |

+--------------------+-----------+------------+

| smp11              | 0.01 MB   | 0.01MB     |

| mydb               | 0.06 MB   | 0.00MB     |

| ibdatax            | 0.03 MB   | 0.00MB     |

| hellodb            | 0.18 MB   | 0.06MB     |

| db1                | 43.62 MB  | 13.04MB    |

| testslave          | 0.01 MB   | 0.00MB     |

| mysql              | 0.53 MB   | 0.08MB     |

| information_schema | 0.00 MB   | 0.00MB     |

+--------------------+-----------+------------+

8 rows in set (0.27 sec)

案例2:各个表所占的磁盘空间大小

查询单个数据库里面各个表所占磁盘空间大小包括其索引的大小,SQL语句如下:

mysql> select TABLE_NAME, concat(truncate(data_length/1024/1024,2),' MB') as data_size,

    -> concat(truncate(index_length/1024/1024,2),' MB') as index_size

    -> from information_schema.tables where TABLE_SCHEMA = 'hellodb'

    -> group by TABLE_NAME

    -> order by data_length desc;

+------------+-----------+------------+

| TABLE_NAME | data_size | index_size |

+------------+-----------+------------+

| classes    | 0.01 MB   | 0.00 MB    |

| classes2   | 0.01 MB   | 0.00 MB    |

| classes3   | 0.01 MB   | 0.00 MB    |

| classes4   | 0.01 MB   | 0.00 MB    |

| coc        | 0.01 MB   | 0.00 MB    |

| courses    | 0.01 MB   | 0.00 MB    |

| paixi      | 0.01 MB   | 0.00 MB    |

| scores     | 0.01 MB   | 0.00 MB    |

| students   | 0.01 MB   | 0.03 MB    |

| students1  | 0.01 MB   | 0.03 MB    |

| teachers   | 0.01 MB   | 0.00 MB    |

| toc        | 0.01 MB   | 0.00 MB    |

| test       | NULL      | NULL       |

+------------+-----------+------------+

13 rows in set (0.00 sec)

此处只需将SQL语句中的hellodb换成其它的数据库名称即可。

 

 

猜你喜欢

转载自blog.csdn.net/Field_Yang/article/details/81209503