Определите, какая таблица занимает больше всего дискового пространства в MySQL - PullRequest
4 голосов
/ 16 марта 2010

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

Гандикап: у меня нет сервера MySQL, только файл со всеми данными (dump.sql)

Ответы [ 3 ]

9 голосов
/ 16 марта 2010

Вы можете загрузить сервер MySQL , установить его на свой локальный хост, импортировать файл дампа , а затем использовать:

SELECT   table_schema, 
         table_name, 
         data_length, 
         index_length 
FROM     information_schema.tables
ORDER BY data_length DESC;
1 голос
/ 16 марта 2010

Если вы работаете в Linux, вы можете отсканировать файл дампа на наличие самой длинной строки, которая может (или не может!) Быть самой большой таблицей в зависимости от индексов, структуры и т. Д., Но это будет достойное предположение, если вы не удается запустить сервер.

awk ' { if ( length > L ) { L=length ;s=$0 } }END{ print L,"\""s"\"" }' /root/sql/_common.all.301009.sql  | cut -c 1-100

Это покажет вам первые 100 символов самой длинной строки. Это может не работать, если у вас есть, например, несколько вставок на таблицу в файле дампа (с опциями --extended-insert или --opt).

0 голосов
/ 16 марта 2010

Быстрое решение может быть сделать что-то подобное для каждой таблицы в дампе:

cat dump.sql | grep -i '^INSERT INTO `table1`' | wc -c

(надеюсь, вы используете Linux, в противном случае вы можете установить Cygwin, чтобы получить некоторые функциональные возможности командной строки linux в системе Windows)

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

...