MySQL - Могу ли я запросить, сколько дискового пространства занимают определенные строки или столбцы? - PullRequest
0 голосов
/ 22 января 2019

У меня есть огромная таблица в MySQL, и я хочу уменьшить ее за счет оптимизации данных.

Теперь мне было интересно, есть ли в MySQL функции, позволяющие подсчитать, сколько байтов я бы сохранил, удалив определенные строки или столбцы?

Так что-то вроде: выберите bytes_used (*) из (подзапрос ...) или что-то вроде этого?

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

Этот вопрос касается оценки возможных выгод и целесообразности такого курса действий.

Любая другая помощь относительно расчета дискового пространства с данными MySQL также очень приветствуется. Я знаю, что вы можете видеть, сколько данных занимает таблица в phpMyAdmin, но я смотрю дальше, чем это.

Добавление: я ищу размер данных на уровне строки или столбца, а не целых таблиц.

1 Ответ

0 голосов
/ 22 января 2019

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

Вы можете запросить таблицу information_schema.TABLES, чтобы получить место на диске, используемое таблицей, например ::10000

SELECT * 
FROM information_schema.TABLES
WHERE TABLE_NAME = `<your_table>`;

Здесь есть следующие столбцы (согласно документации здесь ):

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

AVG_ROW_LENGTH : средняя длина строки.

Это даст вам представление о том, сколько места используется таблицей и сколько места вы приблизительно получите, если удалите несколько строк.

...