Запрос для определения размера таблиц в базе данных? (MySQL) - PullRequest
40 голосов
/ 03 декабря 2011

Сайт "Как рассчитать размер базы данных MySQL" дает два запроса:

Определить размеры всех баз данных

SELECT table_schema "Data Base Name", SUM( data_length + index_length) / 1024 / 1024 
"Data Base Size in MB" FROM information_schema.TABLES GROUP BY table_schema ;

Определить размер всех таблиц в базе данных

SELECT TABLE_NAME, table_rows, data_length, index_length, 
round(((data_length + index_length) / 1024 / 1024),2) "Size in MB"
FROM information_schema.TABLES WHERE table_schema = "schema_name";

Первый запрос работает правильно, но второй запрос не приводит к набору результатов. Он просто показывает имена полей без каких-либо строк. Как я могу изменить второй запрос, чтобы правильно отобразить размеры моих таблиц в моей базе данных.

Ответы [ 4 ]

29 голосов
/ 03 декабря 2011

Замените "schema_name" именем одной из ваших баз данных.

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

22 голосов
/ 22 июня 2012

Это была полезная тема. Это небольшое изменение во втором рецепте OP возвращает только таблицы (без представлений) и упорядочивает возвращенный набор данных по размеру таблицы --- от наибольшего к меньшему:

MySQL

SELECT 
  TABLE_NAME, table_rows, data_length, index_length,  
  round(((data_length + index_length) / 1024 / 1024),2) 'Size in MB' 
FROM information_schema.TABLES 
WHERE table_schema = 'yourSchemaName' and TABLE_TYPE='BASE TABLE' 
ORDER BY data_length DESC;

PostGRES : мне нужно было сделать то же самое в PostGRES сегодня, и заимствовать некоторую помощь у этого ответа (и еще одного, который я потерял после закрытия вкладки браузера), это чем я закончил Добавляя его сюда на случай, если это пригодится кому-либо еще.

SELECT 
  t.tbl table_name,
  ct.reltuples row_count,
  pg_total_relation_size(t.tbl) size,
  pg_size_pretty(pg_total_relation_size(t.tbl)) pretty_size
FROM (
  SELECT 
    table_name tbl
    FROM information_schema.tables
    WHERE 
      table_schema = 'public'
        AND table_type = 'BASE TABLE'
) t
join (
  SELECT 
    relname, reltuples
  FROM pg_class C
    LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
  WHERE 
    nspname NOT IN ('pg_catalog', 'information_schema') 
      AND relkind='r' 
) ct 
on t.tbl = ct.relname
order by size desc ;
11 голосов
/ 03 декабря 2011

Думаю, это лучше .. http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

show table status from database;
3 голосов
/ 23 октября 2012

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

SELECT CASE WHEN (GROUPING(sob.name)=1) THEN 'All_Tables'
   ELSE ISNULL(sob.name, 'unknown') END AS Table_name,
   SUM(sys.length) AS Byte_Length
FROM sysobjects sob, syscolumns sys
WHERE sob.xtype='u' AND sys.id=sob.id
GROUP BY sob.name
WITH CUBE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...