2

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

4

2 回答 2

2
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
于 2012-10-16T17:16:18.603 回答
0

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

您可以通过运行确定

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

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

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

于 2012-10-16T17:25:59.460 回答