Як визначити розмір таблиць у базі даних MySQL или MariaDB

У повсякденній роботі з MySQL користуюся безкоштовною програмою DBeaver. Там є чудова функція — дізнатися повний розмір таблиць. Проблема в тому, перед тим як показати розмір та вагу таблиць програма робить запит до всього вмісту бази даних. Якщо таблиць у БД понад сотні, і розміри понад 10-20 гігабайт, оперативно дізнатися, скільки важить одна таблиця, досить складно.

Як можна через запити дізнатися деталі щодо таблиць у базі даних і окремо щодо однієї таблиці — про це стаття 🙂

Щоб визначити розмір таблиць MySQL або MariaDB, потрібно 2 дії:
1. Підключитися до сервера баз даних будь-яким зручним способом (через CONSOLE або GUI)
2. Виконати SQL запит:

SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024), 2) `Size in KB`
FROM information_schema.TABLES
WHERE table_schema = "DBName";

де, DBName — ім'я бази даних, для якої необхідно отримати список таблиць із розмірами

3. Щоб визначити список і розмір таблиць (у кілобайтах) бази даних MySQL або MariaDB, необхідно буде виконати запит:

SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 ), 2) `Size in KB`
FROM information_schema.TABLES
WHERE table_schema = "DBName";

Для отримання розміру таблиць у мегабайтах, необхідно рядок:

SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = "DBName";

Якщо список таблиць дуже великий, то можна скоротити виведення, додавши умову в конструкцію WHERE:

WHERE table_schema = "DBName"
AND table_name = "TableName";

де, DBName — ім'я бази даних; TableName — ім'я таблиці, для якої необхідно отримати розмір

SQL запит для виведення деталей за однією таблицею:

SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 ), 2) `Size in KB`
FROM information_schema.TABLES
WHERE table_schema = "DBName"
AND table_name = "TableName";

Якщо необхідно отримати обмежений список таблиць, наприклад, тих, що містять певні слова в назві, то можна скоротити виведення, додавши умову (like «FilterTableName») в конструкцію WHERE

WHERE table_schema = "DBName"
AND table_name Like "FilterTableName";

Приклад:

SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 ), 2) `Size in KB`
FROM information_schema.TABLES
WHERE table_schema = "DBName"
AND table_name Like "%TableName%";

На цьому все 🙂 Дуже сподіваюсь, що ця інформація стане вам до нагоди.