一个文件组,多个数据文件,如何获取每个文件中的表列表

Ama*_*mam 5 sql-server-2008 sql-server filegroups

在我的一个生产数据库中,我有一个包含 3 个数据文件的文件组,这些文件位于 3 个不同的磁盘上。此文件组上有 50 多个表。

如何确定 3 个数据文件之间 50 个表中每一个的位置?我需要知道每个表的聚集索引驻留在哪个数据文件上。

例子 :

Table A : Datafile 1 : FG1
Table B : Datafile 2 : FG1
Table C : Datafile 1 : FG1
Table D : Datafile 3 : FG1
Run Code Online (Sandbox Code Playgroud)

Rem*_*anu 13

文件组中的对象将使用文件组中的所有数据文件。FG1 中的任何表都平等地驻留在 Datafile1、Datafile2 和 Datafile3 上。如果需要控制放置,则需要创建不同的文件组。要从文件组中删除文件,请使用DBCC SHRINKFILE EMPTYFILE.

  • 不能保证表格将*平均*地分布在文件中。我可以想到几种情况并非如此(索引重建就是其中之一)。 (2认同)

小智 -2

即使您的数据分布在任意数量的数据文件中,但您仍然可以使用 INFORMATION_SCHEMA.TABLES 来获取表列表。

表格

概述 INFORMATION_SCHEMA.TABLES 视图允许您获取有关数据库中所有表和视图的信息。默认情况下,它将显示数据库中每个表和视图的此信息。

说明 可以从 SQL Server 实例中的任何数据库调用此视图,并将返回该特定数据库中数据的结果。

该视图返回的列如下:

列名称 数据类型 描述

  • TABLE_CATALOG nvarchar(128) 表限定符。
  • TABLE_SCHEMA nvarchar(128) 包含表的架构的名称。
  • TABLE_NAME sysname 表名称。
  • TABLE_TYPE varchar(10) 表的类型。可以是视图或基表。

(来源:SQL Server 2005 联机丛书


以下是从 AdventureWorks 数据库中提取的数据示例。该数据是使用以下查询提取的:

SELECT * FROM INFORMATION_SCHEMA.TABLES
Run Code Online (Sandbox Code Playgroud)

要仅显示表列表,您可以使用以下查询:

SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
Run Code Online (Sandbox Code Playgroud)

要仅显示仅包含视图的列表,您可以使用以下查询:

SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'VIEW' 
Run Code Online (Sandbox Code Playgroud)