как получить размеры таблиц базы данных mysql?

<p>я могу выполнить этот запрос, чтобы получить размеры всех таблиц в базе данных mysql:</p><pre><code>show table status from mydatabasename; </code></pre><p>я хотел бы помочь в понимании результатов. я ищу столы с самыми большими размерами. </p><p>на какую колонку мне посмотреть?</p>

<p>вы можете использовать этот запрос, чтобы показать размер таблицы (хотя сначала вам нужно подставить переменные):</p><pre><code>select table\_name as `table`, round(((data\_length + index\_length) / 1024 / 1024), 2) `size in mb` from information\_schema.tables where table\_schema = "$db_name" and table_name = "$table\_name"; </code></pre><p>или этот запрос, чтобы перечислить размер каждой таблицы в каждой базе данных, сначала по величине:</p><pre><code>select table\_schema as `database`, table\_name as `table`, round(((data\_length + index\_length) / 1024 / 1024), 2) `size in mb` from information\_schema.tables order by (data\_length + index\_length) desc; </code></pre>

<pre><code>select table\_name as "table name", table\_rows as "quant of rows", round( ( data\_length + index\_length ) /1024, 2 ) as "total size kb" from information\_schema.tables where information\_schema.tables.table\_schema = 'your schema name/database name here' limit 0 , 30 </code></pre><p>вы можете получить имя схемы из таблицы «<strong>information\_schema</strong>» -> <strong>schemata</strong> -> столбец «<strong>schema\_name</strong>»</p><hr><p><strong>additional</strong> вы можете получить <strong>размер базы данных mysql</strong> следующим образом.</p><pre><code>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; </code></pre><p><strong>результат</strong></p><pre><code>db name | db size in mb mydatabase\_wrdp 39.1 information\_schema 0.0 </code></pre><p>вы можете <a href="http://webexplorar.com/how-can-i-get-database-table-sizes/">получить дополнительную информацию здесь.</a> </p>

<pre><code>select table\_name as "table", round(((data\_length + index\_length) / 1024 / 1024), 2) as size from information\_schema.tables where table\_schema = "your\_database\_name" order by size desc; </code></pre><p>это сортирует размеры (размер бд в мб).</p>

<p>если вы хотите, чтобы запрос использовал текущую выбранную базу данных. просто скопируйте и вставьте этот запрос. (никаких изменений не требуется)</p><pre><code>select table\_name , round(((data\_length + index\_length) / 1024 / 1024), 2) as size\_mb from information\_schema.tables where table\_schema = database() order by size\_mb desc; </code></pre>

<p>есть простой способ получить много информации, используя workbench:</p><ul> <li><p>щелкните правой кнопкой мыши имя схемы и выберите «инспектор схемы».</p></li> <li><p>в появившемся окне у вас есть несколько вкладок. первая вкладка «информация» показывает приблизительную оценку размера базы данных в мб.</p></li> <li><p>вторая вкладка, «таблицы», показывает длину данных и другие детали для каждой таблицы.</p></li> </ul>

<p>предположим, что ваша база данных называется<strong> <em>"news\_alert".</em> </strong>затем этот запрос покажет размер всех таблиц в базе данных.</p><p><strong> размер всех таблиц: </strong></p><pre><code>select table\_name as `table`, round(((data\_length + index\_length) / 1024 / 1024),2) as `size (mb)` from information\_schema.tables where table\_schema = "news\_alert" order by (data\_length + index\_length) desc; </code></pre><p><strong> результат: </strong></p><pre><code> +---------+-----------+ | table | size (mb) | +---------+-----------+ | news | 0.08 | | keyword | 0.02 | +---------+-----------+ 2 rows in set (0.00 sec) </code></pre><p><strong> для конкретной таблицы: </strong></p><pre><code>select table\_name as `table`, round(((data\_length + index\_length) / 1024 / 1024),2) as `size (mb)` from information\_schema.tables where table\_schema = "news\_alert" and table\_name = "news" order by (data\_length + index\_length) desc; </code></pre><p><strong> результат: </strong></p><pre><code>+-------+-----------+ | table | size (mb) | +-------+-----------+ | news | 0.08 | +-------+-----------+ 1 row in set (0.00 sec) </code></pre>

<p>попробуйте следующую команду оболочки (замените <code>db\_name</code> на имя вашей базы данных):</p><blockquote> <p><code>mysql -uroot <<<"select table\_name as 'tables', round(((data\_length + index\_length) / 1024 / 1024), 2) 'size in mb' from information\_schema.tables where table\_schema = \"db\_name\" order by (data\_length + index\_length) desc;" | head</code></p> </blockquote><p>для решения drupal/drush, проверьте следующий пример сценария, который будет отображать самые большие таблицы в использовании:</p><pre><code>#!/bin/sh db\_name=$(drush status --fields=db-name --field-labels=0 | tr -d 'rn ') drush sqlq "select table_name as 'tables', round(((data_length + index_length) / 1024 / 1024), 2) 'size in mb' from information_schema.tables where table_schema = "${db\_name}\" order by (data\_length + index\_length) desc;" | head -n20 </code></pre>

<p>если вы используете phpmyadmin, просто перейдите к структуре таблицы</p><p>например.</p><pre><code>space usage data 1.5 mib index 0 b total 1.5 mi </code></pre>

<p>вот еще один способ решить эту проблему с помощью командной строки bash. </p><p><code> for i in <code>mysql -nb -e 'show databases'</code>; сделать эхо $ я; mysql -e "select table_name as" таблицы ", округлые (((data_length + index_length)/1024/1024), 2) 'размер в мб' от information_schema.tables where table_schema = " $ i\"order by (data\_length + index\_length) desc "; сделано </ код></p>

<p>адаптировано из ответа chapmic, чтобы соответствовать моей конкретной потребности.</p><p>укажите только имя вашей базы данных, затем отсортируйте все таблицы в порядке убывания - от largest до самой маленькой таблицы внутри выбранной базы данных. требуется заменить только 1 переменную = имя вашей базы данных.</p><pre><code>select table\_name as `table`, round(((data\_length + index\_length) / 1024 / 1024), 2) as `size` from information\_schema.tables where table\_schema = "your\_database\_name\_here" order by size desc; </code></pre>

<p>другой способ показать количество строк и занимаемое пространство и упорядочить его. </p><pre><code>select table\_schema as `database`, table\_name as `table`, table\_rows as "quant of rows", round(((data\_length + index\_length) / 1024 / 1024/ 1024), 2) `size in gb` from information\_schema.tables where table\_schema = 'yourdatabasename' order by (data\_length + index\_length) desc; </code></pre><p>единственная строка, которую вы должны заменить в этом запросе, это "yourdatabasename".</p>

<p>я считаю, что существующие ответы на самом деле не дают размер таблиц на диске, что является более полезным. этот запрос дает более точную оценку диска по сравнению с размером таблицы на основе data\_length & index. мне пришлось использовать это для экземпляра aws rds, где вы не можете физически изучить диск и проверить размеры файлов.</p><pre><code>select name as tablename,file\_size/(1024*1024*1024) as actual\_file\_size\_gb , round(((data\_length + index\_length) / 1024 / 1024/1024), 2) as reported\_table\_size\_gb from information\_schema.innodb\_sys\_tablespaces s join information\_schema.tables t on name = concat(table\_schema,'/',table\_name) order by file\_size desc </code></pre>

<p>если у вас есть доступ к <code>ssh</code>, вы можете просто попробовать <code>du -hc /var/lib/mysql</code> (или другой <code>datadir</code>, как указано в вашем <code>my.cnf</code>).</p>

<p>рассчитайте общий размер базы данных в конце:</p><pre><code>(select table\_name as `table`, round(((data\_length + index\_length) / 1024 / 1024), 2) `size in mb` from information\_schema.tables where table\_schema = "$db_name" ) union all (select 'total:', sum(round(((data_length + index_length) / 1024 / 1024), 2) ) from information_schema.tables where table_schema = "$db\_name" ) </code></pre>

<p>это должно быть проверено в mysql, а не в postgresql <code> 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; </code></p>

<pre><code>select table\_name as table\_name, table\_rows as quantofrows, round((data\_length + index\_length) /1024, 2 ) as total\_size\_kb from information\_schema.tables where information\_schema.tables.table\_schema = 'db' order by (data\_length + index\_length) desc; </code></pre><p>все 2 выше проверено на mysql</p>