Как получить реальный размер базы данных MySQL?
Я хотел бы знать, сколько места использует моя база данных MySQL, чтобы выбрать веб-хост.
Я нашел команду SHOW TABLE STATUS LIKE 'table_name'
, поэтому, когда я делаю запрос, я получаю что-то вроде этого:
Name | Rows | Avg. Row Length | Data_Length | Index Length
---------- ---- --------------- ----------- ------------
table_name 400 55 362000 66560
Итак, у меня есть 362000 или 400 * 362000 = 144800000 байтов данных для этой таблицы?
И что означает значение индекса?
Спасибо!
Ответы
Ответ 1
От С. Пракаша, найденного в Форум MySQL:
SELECT table_schema "database name",
sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
sum( data_free )/ 1024 / 1024 "free space in MB"
FROM information_schema.TABLES
GROUP BY table_schema;
Ответ 2
Вы можете получить размер своей базы данных Mysql, выполнив следующую команду в клиенте Mysql
SELECT sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2)) as "Size in GB"
FROM information_schema.TABLES
WHERE table_schema = "<database_name>"
Ответ 3
Если вы используете phpMyAdmin, он может сообщить вам эту информацию.
Просто перейдите в "Базы данных" (меню сверху) и нажмите "Включить статистику".
Вы увидите что-то вроде этого:
![phpMyAdmin screenshot]()
Это, вероятно, потеряет некоторую точность по мере увеличения размеров, но для ваших целей это должно быть достаточно точным.
Ответ 4
если вы хотите найти его в MB, сделайте это
SELECT table_schema "DB Name",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;
Ответ 5
В основном существует два способа:
запросить DB (длина данных + длина индекса) или проверить размер файлов. Длина индекса связана с данными, хранящимися в индексах.
Все описано здесь:
http://www.mkyong.com/mysql/how-to-calculate-the-mysql-database-size/
Ответ 6
Ни один из ответов не включает размер служебных данных и размеры таблиц метаданных.
Ниже приведена более точная оценка "дискового пространства", выделенного базой данных.
SELECT ROUND((SUM(data_length+index_length+data_free) + (COUNT(*) * 300 * 1024))/1048576+150, 2) AS MegaBytes FROM information_schema.TABLES WHERE table_schema = 'DATABASE-NAME'
Ответ 7
SUM(Data_free)
может быть или не быть действительным. Это зависит от истории innodb_file_per_table
. Подробнее обсуждение здесь.