Как определить, сколько места на диске занимает определенная таблица MySQL?

Есть ли быстрый способ определить, сколько места на диске занимает определенная таблица MySQL? Таблица может быть MyISAM или Innodb.

Ответ 1

Для таблицы mydb.mytable запустите это для:

БАЙТ

SELECT (data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

килобайт

SELECT (data_length+index_length)/power(1024,1) tablesize_kb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

MEGABYTES

SELECT (data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

GIGABYTES

SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

ОБЩИЙ

Вот общий запрос, где максимальный дисплей устройства - TB (TeraBytes)

SELECT 
    CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',SUBSTR(units,pw1*2+1,2)) DATSIZE,
    CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',SUBSTR(units,pw2*2+1,2)) NDXSIZE,
    CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',SUBSTR(units,pw3*2+1,2)) TBLSIZE
FROM
(
    SELECT DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
    FROM 
    (
        SELECT data_length DAT,index_length NDX,data_length+index_length TBL,
        FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px,
        FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py,
        FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz
        FROM information_schema.tables
        WHERE table_schema='mydb'
        AND table_name='mytable'
    ) AA
) A,(SELECT 'B KBMBGBTB' units) B;

Дайте ему попробовать!!!

Ответ 3

Быстрый бит SQL для получения 20 лучших таблиц в MB.

SELECT table_schema, table_name,
  ROUND((data_length+index_length)/POWER(1024,2),2) AS tablesize_mb
FROM information_schema.tables
ORDER BY tablesize_mb DESC LIMIT 20;

Надеюсь, что это кому-то полезно!

Ответ 5

Основываясь на ответе RolandMySQLDBA, я думаю, мы можем использовать приведенное выше, чтобы получить размер каждой схемы в таблице:

SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb 
    FROM information_schema.tables GROUP BY table_schema;

Действительно понравилось!

Ответ 6

Взято из Как проверить, сколько дискового пространства используется моей базой данных?

Вы можете проверить размер таблицы MySQL, посмотрев phpMyAdmin в вашей панели управления, нажав на имя базы данных в левом фрейме и чтение размера для таблиц там в правом кадре.

Следующий запрос также поможет получить ту же информацию в bytes

select SUM(data_length) + SUM(index_length) as total_size 
from information_schema.tables 
where table_schema = 'db_name' 
and table_name='table_name';

Ответ 7

Возможно, вы можете посмотреть размер файлов...

Каждая таблица хранится в нескольких отдельных файлах внутри папки, которая называется тем, что вы назвали своей базой данных. Эти папки хранятся в каталоге данных mysql.

Оттуда вы можете сделать "du -sh. *", чтобы получить размер таблицы на диске.

Ответ 8

Я бы просто использовал инструмент mysqldiskusage, как следует

$ mysqldiskusage --server=user:[email protected] mydbname
# Source on localhost: ... connected.

# Database totals:
+------------+----------------+
| db_name    |         total  |
+------------+----------------+
| mydbaname  | 5,403,033,600  |
+------------+----------------+

Total database disk usage = 5,403,033,600 bytes or 5.03 GB