我想知道一个数据表当前的存储状态
请问怎么样查看一个数据表所占的页数以及索引页数.不连续的空间信息

解决方案 »

  1.   

    --?
    exec sp_spaceused 'tablename'
      

  2.   

    if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) create table tablespaceinfo --创建临时表 
    (nameinfo varchar(50) , --表名 
    rowsinfo int , --表中现有的行数 
    reserved varchar(20) , --表空间总量 
    datainfo varchar(20) , --表中数据的空间量 
    index_size varchar(20) , --表中索引使用的空间量 
    unused varchar(20) ) --表中未用的空间量 
    delete from tablespaceinfo 
    declare @tablename varchar(255) 
    declare @cmdsql varchar(500) 
    DECLARE Info_cursor CURSOR FOR 
    select name 
    from dbo.sysobjects where OBJECTPROPERTY(id, N'IsTable') = 1 
    and name not like N'#%%' order by name 
    OPEN Info_cursor 
    FETCH NEXT FROM Info_cursor 
    INTO @tablename 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
    if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1) 
    execute sp_executesql 
    N'insert into tablespaceinfo exec sp_spaceused @tbname', 
    N'@tbname varchar(255)', 
    @tbname = @tablename 
    FETCH NEXT FROM Info_cursor 
    INTO @tablename 
    END 
    CLOSE Info_cursor 
    DEALLOCATE Info_cursor 
    GO 
    --表空间信息 
    select * 
    from tablespaceinfo 
    order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc
      

  3.   


    select sys.tables.name,sys.dm_db_partition_stats.*   
    from sys.dm_db_partition_stats     
    left join     sys.tables     on sys.dm_db_partition_stats.object_id = sys.tables.object_id    
    where ..(+具体id)
    order by sys.dm_db_partition_stats .row_count desc         EXEC sp_spaceused ut_retailsalesinputdetail 
    --Rows行总数,reserved所有使用的页数大小(包括聚集),data聚集索引的大小,index_size非聚集索引的大小
      

  4.   

    -- 表和索引空间占用
    EXEC sp_spaceused '表名'-- 表和索引的碎片信息
    DBCC SHOWCONTIG('表名')