Here's a new version of sp_bigtables that breaks things down by data, text, and indexes. We're looking at getting an ssd (drool), and needed to size it appropriately (no sense putting text on it).Also, in addition to detailed info on the 25 largest tables, it gives a total resultset for all tables in the db.Cheers-bCREATE PROCEDURE sp_bigtables ASset nocount on/**************************************************************************************** BigTables.sql* Bill Graziano (SQLTeam.com)* graz@sqlteam.com* v1.12** Updated by aiken to show blob size separately***************************************************************************************/declare @id int declare @type character(2) declare @pages int declare @dbname sysnamedeclare @dbsize dec(15,0)declare @bytesperpage dec(15,0)declare @pagesperMB dec(15,0)create table #spt_space( objid int null, rows int null, reserved dec(15) null, data dec(15) null, text dec(15) null, indexp dec(15) null, unused dec(15) null)set nocount on-- Create a cursor to loop through the user tablesdeclare c_tables cursor forselect idfrom sysobjectswhere xtype = 'U'open c_tablesfetch next from c_tablesinto @idwhile @@fetch_status = 0begin /* Code from sp_spaceused */ insert into #spt_space (objid, reserved) select objid = @id, sum(reserved) from sysindexes where indid in (0, 1, 255) and id = @id select @pages = sum(dpages) from sysindexes where indid < 2 and id = @id update #spt_space set data = @pages where objid = @id select @pages = sum(reserved) from sysindexes where indid = 255 and id = @id update #spt_space set text = @pages where objid = @id /* index: sum(used) where indid in (0, 1, 255) - data */ update #spt_space set indexp = (select sum(used) from sysindexes where indid in (0, 1,255) and id = @id) - (data + text) where objid = @id /* unused: sum(reserved) - sum(used) where indid in (0, 1, 255) */ update #spt_space set unused = reserved - (select sum(used) from sysindexes where indid in (0, 1, 255) and id = @id) where objid = @id update #spt_space set rows = i.rows from sysindexes i where i.indid < 2 and i.id = @id and objid = @id fetch next from c_tables into @idendselect top 25 Table_Name = (select left(name,25) from sysobjects where id = objid), rows = convert(char(11), rows), reserved_KB = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'), data_KB = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'), text_KB = ltrim(str(text * d.low / 1024.,15,0) + ' ' + 'KB'), index_size_KB = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'), unused_KB = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB'), idx_data_ratio = ltrim(str(indexp*100 /data) + '%'), unused_pct = ltrim(str(unused * 100 /reserved) + '%') from #spt_space, master.dbo.spt_values dwhere d.number = 1 and d.type = 'E' and rows>0order by reserved descselect Table_Name = 'Total', rows = convert(char(11), sum(rows)), reserved_KB = ltrim(str(sum(reserved) * d.low / 1024.,15,0) + ' ' + 'KB'), data_KB = ltrim(str(sum(data) * d.low / 1024.,15,0) + ' ' + 'KB'), text_KB = ltrim(str(sum(text) * d.low / 1024.,15,0) + ' ' + 'KB'), index_size_KB = ltrim(str(sum(indexp) * d.low / 1024.,15,0) + ' ' + 'KB'), unused_KB = ltrim(str(sum(unused) * d.low / 1024.,15,0) + ' ' + 'KB'), idx_data_ratio = ltrim(str(sum(indexp)*100 /sum(data)) + '%'), unused_pct = ltrim(str(sum(unused) * 100 /sum(reserved)) + '%')from #spt_space, master.dbo.spt_values dwhere d.number = 1 and d.type = 'E' and rows>0group by d.lowdrop table #spt_spaceclose c_tablesdeallocate c_tables