Usando a seguinte consulta, posso obter o tamanho dos índices de uma tabela:
SELECT
i.name AS IndexName,
SUM(page_count * 8) AS IndexSizeKB
FROM sys.dm_db_index_physical_stats(db_id(), object_id('schema.table'), NULL, NULL, 'DETAILED') AS s
JOIN sys.indexes AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
GROUP BY i.name
ORDER BY i.name
Se eu executar sp_spaceused 'schema.table'
o tamanho sem índices corresponde à data
coluna?
Alguma maneira de obter o tamanho da tabela sem índices no sql server? ( SELECT
a declaração seria boa, pois gostaria de conectar essa consulta a uma consulta maior).
Se eu executar Get size of all tables in database , os tamanhos das tabelas são quase os mesmos dos tamanhos dos índices (sugerindo que algo está errado).
Existem várias maneiras de encontrar o tamanho de uma tabela no banco de dados. A primeira e mais fácil maneira é clicar com o botão direito do mouse na tabela e verificar a guia de armazenamento e isso fornece espaço de dados e espaço de índice. O espaço de dados nada mais é do que o tamanho dos dados na tabela e, da mesma forma, o espaço de índice fornece o tamanho do índice na tabela mencionada.
As informações acima corresponderiam exatamente ao comando
sp_spaceused 'schema_name.table_name'
Podemos verificar o mesmo para a Tabela de usuários (no esquema dbo e no banco de dados StackOverFlow).Aqui, se você adicionar dados, tamanho do índice e não utilizado (em KB), obterá espaço reservado por tabela.
Você também pode verificar o tamanho da tabela e do índice executando o comando sp_blitzindex(do Sr. Brent Ozar). O comando ficaria como abaixo:
Aqui, você pode verificar a coluna Tamanho. O tamanho do índice clusterizado fornecerá o tamanho da tabela e você também poderá encontrar o tamanho de cada índice, bem como seu uso (se estiver interessado).
Além disso, você também pode verificar o tamanho da tabela de todos eles entrando em Relatórios conforme abaixo:
Você também pode executar a instrução select abaixo para obter o tamanho total e o tamanho do índice de todas as tabelas:
Se você quiser apenas os tamanhos da tabela, execute o seguinte:
Espero que isto ajude.
O DMV retorna as informações que você deseja, você só precisa saber que index_id = 0 é para Heaps e que Index_id 1 é para o índice clusterizado
São esses que são relatados como dados na saída de sp_spaceused
usar tempdb
create table heap(id int identity(1,1), txt nvarchar(max) default 'hahaha')
inserir valores de heap (txt) ('um')
selecione object_name(object_id) como objname, * FROM sys.dm_db_index_physical_stats(db_id(), object_id('schema.table'), NULL, NULL, 'DETAILED') AS s onde index_id = 0