Как проще всего определить, какая таблица занимает больше всего места на диске?
Помеха: у меня нет MySQL сервера, только файл со всеми данными (dump.sql)
Как проще всего определить, какая таблица занимает больше всего места на диске?
Помеха: у меня нет MySQL сервера, только файл со всеми данными (dump.sql)
Вы можете захотеть загрузить сервер MySQL, установить его на свой локальный хост, импортируйте файл дампа, а затем используйте:
SELECT table_schema,
table_name,
data_length,
index_length
FROM information_schema.tables
ORDER BY data_length DESC;
Если вы работаете в 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
).
Быстрое решение может заключаться в том, чтобы сделать что-то подобное для каждой таблицы в дампе:
cat dump.sql | grep -i '^INSERT INTO `table1`' | wc -c
(Я надеюсь, что вы используете Linux, в противном случае вы можете установить Cygwin, чтобы получить некоторые функциональные возможности командной строки Linux в системе Windows)
Эта команда отфильтрует операторы вставки дампа для конкретной таблицы и распечатает общее количество байтов этих отфильтрованных операторов вставки. Конечно, размер операторов вставки не совпадает с размером хранимых строк в таблице, но это может быть хорошим приближением, если вам нужно только решить, какая таблица (вероятно) самая большая.
cat
и wc -c
находится команда grep
. Это на лету создаст вот такой индивидуальный дамп ...
- person tux21b; 16.03.2010
cat dump.sql | grep -i '^INSERT INTO
table1'
, вы должны видеть только строки, начинающиеся с INSERT INTO table1, и никаких строк, начинающихся с INSERT INTO table2 или что-то в этом роде. Эти заявления фильтруются. wc -c
затем отобразите байты только совпадающих строк.
- person tux21b; 16.03.2010