Поиск по сайту:

Как увидеть, какие таблицы MySQL занимают больше всего места


Резервные копии базы данных — это одна из тех вещей, которые становятся все больше и больше, пока не поглотят всю материю в мире. В отличие от реалити-шоу, вы можете легко удалить данные из базы данных, чтобы уменьшить размер резервных копий. Но какие вещи?

MySQL хранит метаинформацию о базах данных и таблицах в базе данных information_schema, а информация конкретно о таблицах хранится в таблице TABLES. Поэтому все, что нам нужно сделать, это запустить запрос, чтобы найти его.

Хм. Может быть, нам нужно запустить лучший запрос.

Таким образом, столбец data_length показывает, сколько данных на самом деле находится в таблицах, так что, может быть, если мы просто включим это и отсортируем, мы получим что-то лучшее… хм… теперь это в байтах. Ладно, хватит возиться.

В MySQL есть два места, где хранятся огромные наборы данных: таблицы и индексы. У вас может быть таблица, в которой хранится миллион записей, но если у вас также есть куча индексов по многим из этих столбцов, эти данные должны дублироваться и сортироваться по-разному и храниться в индексе для каждого из них.

Поэтому, чтобы получить истинный размер таблицы, нам нужно будет включить длину индекса. И не мешало бы вместо этого конвертировать из байтов в МБ, пока мы этим занимаемся. Итак, вот лучший запрос, который даст вам 20 лучших таблиц для всех баз данных на вашем сервере.

select table_schema as db,table_name, round((data_length+index_length) / 1048576,1) as size from information_schema.tables order by data_length+index_length desc limit 20;

Что даст вам вывод примерно такого:

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

select table_schema as db,table_name, round((data_length) / 1048576,1) as tablesize,round((index_length) / 1048576,1) as indexsize from information_schema.tables order by data_length desc limit 20;

Как видите, стоит взглянуть на ваши индексы, если вы пытаетесь уменьшить размер своей базы данных на сервере, поскольку они могут быть огромными. Но… не удаляйте индексы только потому, что они большие — они невероятно важны для ускорения запросов, особенно к большим базам данных.

И индексы в любом случае не включаются в резервные копии базы данных.