【问题标题】:tsql to return the datafile for an indextsql 返回索引的数据文件
【发布时间】:2012-10-16 17:07:06
【问题描述】:

我有 3 个数据文件用于 SQL Server 2005 中数据库的主文件组。是否可以确定特定索引驻留在哪个数据文件上,或者它们是否存在于文件组内的多个数据文件中?

【问题讨论】:

    标签: sql sql-server sql-server-2005


    【解决方案1】:
    select  object_name(i.id) as TableName
    ,       i.name as IndexName
    ,       fg.name as FilegroupName
    ,       df.name as FileName
    ,       df.physical_name as FilePhysicalName
    from    sys.sysindexes i
    join    sys.filegroups fg
    on      fg.data_space_id = i.groupid
    join    sys.database_files df
    on      df.data_space_id = fg.data_space_id
    join    sys.data_spaces ds
    on      ds.data_space_id = fg.data_space_id
    where   objectproperty(i.id,'IsUserTable') = 1
    

    【讨论】:

      【解决方案2】:

      诸如标签和索引之类的对象是建立在文件组上的,而不是文件上。索引很可能驻留在文件组内的所有文件中。有少数例外情况并非如此,例如如果添加了更多文件,导致文件分配热点等,但 SQL Server 对文件使用比例填充算法,并均匀填充它们。

      你可以通过运行肯定看到

      DBCC IND('myDatabase','myTable',2)
      

      其中 2 是您感兴趣的索引的 indexID。

      这将显示每个页面的文件 ID

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-05
        • 1970-01-01
        • 1970-01-01
        • 2019-12-23
        • 1970-01-01
        • 2015-01-02
        • 2014-06-11
        • 1970-01-01
        相关资源
        最近更新 更多