我的环境中有 2 个 MySQL 数据库。一个只有 40Mb,另一个是 20Gb。它们属于称为 infoview 的业务对象应用程序。40Mb 是正确的大小,是工作的 infoview 应用程序。
我想从表 cms_infoobjects6 中准确找出哪些数据占用了所有空间。
我正在与我的数据库人员交谈,但我似乎没有得到任何结果,他说他可以看到一个 longblob 专栏,但没有关于此的真实信息。
用于SHOW CREATE TABLE tablename
显示给定表的架构。这可能会说LONGBLOB
- 这意味着允许最多容纳 4GB 数据的列。它可能会说VARCHAR(100)
,一列最多可容纳 100 个字符。
要找到这些列的实际大小,您需要类似
SELECT LENGTH(col) FROM tablename;
这将为col
.
问题是什么?
您可以使用这样的查询。有关于任何表的所有信息。您必须添加 INDEX_LENGTH + DATA_LENGTH 才能获得孔表大小。
SELECT * FROM information_schema.tables
WHERE
table_schema='yourSchema'
AND
TABLE_NAME='job';
样本
MariaDB [yourschema]> SELECT * FROM information_schema.tables
-> WHERE
-> table_schema='yourSchema'
-> AND
-> TABLE_NAME='job'\G
*************************** 1. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: yourschema
TABLE_NAME: job
TABLE_TYPE: BASE TABLE
ENGINE: InnoDB
VERSION: 10
ROW_FORMAT: Compact
TABLE_ROWS: 7
AVG_ROW_LENGTH: 2340
DATA_LENGTH: 16384
MAX_DATA_LENGTH: 0
INDEX_LENGTH: 0
DATA_FREE: 0
AUTO_INCREMENT: NULL
CREATE_TIME: 2016-06-28 11:46:14
UPDATE_TIME: NULL
CHECK_TIME: NULL
TABLE_COLLATION: utf8_general_ci
CHECKSUM: NULL
CREATE_OPTIONS:
TABLE_COMMENT:
1 row in set (0.08 sec)
MariaDB [yourschema]>