Запрос для определения размера таблиц в базе данных? (MySQL)

На веб-сайте Как рассчитать размер базы данных 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";

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

Ответ 2

Это была полезная тема. Эта небольшая вариация второго рецепта 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 ;

Ответ 4

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

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