ti-enxame.com

Consulta para determinar o tamanho das tabelas em um banco de dados? (mysql)

O site "Como calcular o tamanho do banco de dados MySQL" fornece duas consultas:

Determinar tamanhos de todos os bancos de dados

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 ;

Determinar o tamanho de todas as tabelas em um banco de dados

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";

A primeira consulta funciona corretamente, mas a segunda consulta não produz um conjunto de resultados. Apenas mostra os nomes dos campos sem nenhuma linha. Como posso modificar a 2ª consulta para mostrar corretamente o tamanho dos tamanhos das minhas tabelas no meu banco de dados.

40
user784637

Substituir "schema_name" com o nome de um dos seus bancos de dados.

E se aspas simples para literais de string , não aspas duplas.

29
Bill Karwin

Este foi um tópico útil. Essa pequena variação na segunda receita do OP retorna apenas tabelas (sem visualizações) e ordena o conjunto de dados retornado pelo tamanho da tabela --- do maior para o menor:

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 : eu precisava fazer a mesma coisa no PostGRES hoje e pedir emprestada alguma ajuda de esta resposta (e outra que eu perdida depois de fechar a guia do navegador), foi com isso que acabei. Adicioná-lo aqui, caso seja útil para mais alguém.

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 ;
23
elrobis

Eu acho que isso é melhor .. http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

show table status from database;
11
user862010

Aqui está uma consulta que eu uso para fornecer o tamanho de cada tabela em um banco de dados.

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
3
Scott S