我在SQL Server 2005中为数据库的主文件组提供了3个数据文件。是否可以确定特定索引所在的数据文件,或者它们是否存在于文件组中的多个数据文件中?
答案 0 :(得分: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
答案 1 :(得分:0)
tabke和索引等对象构建在文件组上,而不是文件上。索引wiLl最有可能驻留在文件组中的所有文件中。有一些例外情况并非如此,例如是否添加了更多文件,导致文件分配热点等,但SQL Server对文件使用比例填充算法,并均匀填充。
您可以通过运行
查看DBCC IND('myDatabase','myTable',2)
其中2是您感兴趣的索引的indexID。
这将显示每个页面的fileID