数据库文件结构、sqlserver ON [PRIMARY]
在sqlserver创建表的语句中,最后总来一句on[primary],这到底是什么意思?
。联机丛书中CREATE TABLE的语法下似乎没有找到。最后终于发现,具体如下:
在CREATE TABLE的语法中有这样一句可选语法项目:
[ ON { filegroup | DEFAULT } ]
用来指定存储表的文件组。
如果指定 filegroup,则表将存储在指定的文件组中。数据库中必须存在该文件组。如果指定 DEFAULT,或者根本未指定 ON 参数,则表存储在默认文件组中。
(DEFAULT 并不是关键字。DEFAULT 是默认文件组的标识符并需对其进行定界,如 ON "DEFAULT"、ON [DEFAULT]。)
ON [PRIMARY]是表示表是建立在主文件组上。PRIMARY表示主文件组。如果没有指定默认文件组,则主文件组是默认文件组,ON [PRIMARY]也可以省略掉了。
由数据库说开来。Microsoft® SQL Server™ 2000 使用一组操作系统文件映射数据库,也可以说将数据库映射到一组操作系统文件上(看你怎么理解了)。数据库中的所有数据和对象(如表、存储过程、触发器和视图)都存储在操作系统文件(数据库文件):主要数据文件 、次要数据文件 和事务日志 文件中。
1.主要数据文件
该文件包含数据库的启动信息,并用于存储数据。是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是 .mdf。
2.次要数据文件
这些文件含有不能置于主要数据文件中的所有数据即包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。(如果主文件可以包含数据库中的所有数据,那么数据库就不需要次要数据文件。有些数据库可能足够大故需要多个次要数据文件,或使用位于不同磁盘驱动器上的辅助文件将数据扩展到多个磁盘。)次要数据文件的推荐文件扩展名是 .ndf。
3.事务日志文件
该数据库的日志信息。每个数据库都必须至少有一个日志文件。日志文件的推荐文件扩展名是 .ldf。
文件组
出于分配和管理目的,可以将数据库文件分成不同的文件组。文件组是SQL Server 2000数据文件的一种逻辑管理单位。SQL Server中一个或多个文件的命名集合,它构成分配或用于数据库管理的单个单元。在首次建数据库,或者以后将更多文件添加到数据库时,可以创建文件组。文件组不能独立于数据库文件创建。文件组是在数据库中对文件进行分组的一种管理机制。
有两种类型的文件组:主要文件组和用户定义文件组。(可以说,数据库由一个主文件组和任意用户定义的文件组组成。)
1.主文件组 (PRIMARY)
用户定义文件组 默认文件组 同为文件组的一种类型。
其包含主要数据文件和任何没有明确指派给其它文件组的其它文件。系统表的所有页均分配在主文件组.
2.用户定义文件组
用户定义文件组是在 CREATE DATABASE 或 ALTER DATABASE 语句中,使用 FILEGROUP 关键字或在 SQL Server 企业管理器内的"属性"对话框指定的文件组。
另:默认文件组 (DEFAULT 文件组)
文件组的一种类型,其包含在创建时没有指定文件组的所有表和索引的页。在每个数据库中,每次只能有一个文件组是默认文件组。如果没有指定默认文件组,则默认文件组是主文件组。 可用 ALTER DATABASE 语句更改默认文件组。通过更改默认文件组,创建时没有指定文件组的任何对象都被分配到新默认文件组中的数据文件。然而,系统对象和表仍然保留在 PRIMARY 文件组内,而不是新默认文件组。(每个数据库中都有一个文件组作为默认文件组运行。当 SQL Server 给创建时没有为其指定文件组的表或索引分配页时,将从默认文件组中进行分配。一次只能有一个文件组作为默认文件组。db_owner 固定数据库角色成员可以将默认文件组从一个文件组切换到另一个。如果没有指定默认文件组,则主文件组是默认文件组。)
注:SQL Server 2000 在没有文件组时也能有效地工作,因此许多系统不需要指定用户定义文件组。在这种情况下,所有文件都包含在主文件组中,而且 SQL Server 2000 可以在数据库内的任何位置分配数据。文件组不是在多个驱动器之间分配 I/O 的唯一方法。
附:
. 为什么要建立文件组
建立文件组有两个目的。
一是可以更好地分配和管理存储空间,通过控制在特定磁盘驱动器上放置数据和索引来提高数据库的性能。
二是由于操作系统对物理文件的大小进行了限制,所以当某个磁盘上的数据文件超过单个文件允许的最大值时,可以使用文件组中存
贮在其他驱动器上的数据文件继续扩充存储空间。
. 数据文件和文件组的使用规则
SQL Server 2000中的数据文件和文件组的使用规则包括:
数据文件或文件组不能由一个以上的数据库使用。
数据文件只能是一个文件组的成员。
数据文件和日志文件不能属于同一文件或文件组。
日志文件不能属于任何文件组。
只有文件组中的所有数据文件都没有空间了,文件组的文件才会自动增长。
. 文件组的工作原理
文件组对组内的所有文件都使用按比例填充策略。当将数据写入文件组时,SQL Server 2000根据文件中的可用空间量将一定比例的数据写入文
件组的每个文件,而不是将所有的数据先写满第一个文件,接着再写入下一个文件。例如,如果文件1有100MB的可用空间,文件2有200MB的可
用空间,则从文件1中分配一个盘区,从文件2中分配两个盘区,依此类推。这样,两个文件几乎同时填满。
一旦文件组内的所有文件已满,SQL Server 2000就自动地采用循环方式一次扩展一个文件,以容纳更多的数据(假定数据库设置为自动增长)
。例如,某个文件组由3个文件组成,它们都设置为自动增长。当文件组中的所有文件的空间用完时,只扩展第一个文件。当第一个文件已满,
不能将更多的数据写入该文件组时,扩展第二个文件。当第二个文件已满,不能将更多的数据写入该文件组时,扩展第3个文件。如果第3个文
件已满,不能将更多的数据写入该文件组,那么再次扩展第一个文件,以此类推。
正时由于文件组的这种特性,允许跨多个磁盘、多个磁盘控制器或 RAID(廉价磁盘冗余阵列)系统创建数据库,可提高数据库性能。例如,如
果计算机中有4个磁盘,那么可以创建一个由3个数据文件和一个日志文件组成的数据库,每个磁盘上放置一个文件。在对数据进行访问时,四
个读/写磁头可以同时并行地访问数据,从而加速数据库操作。
另外,文件和文件组允许数据布局,可以在特定的文件组中创建表。因为特定表的所有输入/输出都可以定向到特定的磁盘,所以性能得以改善
。例如,可以将最常用的表放在一个文件组中的一个文件中,该文件组位于一个磁盘上;而将数据库中其它的不常访问的表放在另一个文件组
中的其它文件中,该文件组位于第二个磁盘上。
. 如何使用文件组的建议
大多数数据库在只有单个数据文件和单个事务日志文件的情况下可以很好地运行。
如果使用多个文件,请为附加文件创建第二个文件组,并将其设置为默认文件组。这样,主文件将仅包含系统表和对象。
若要获得最佳性能,请在尽可能多的可用本地物理磁盘上创建文件或文件组,并将争夺空间最激烈的对象置于不同的文件组中。
使用文件组以允许将对象放置在特定的物理磁盘上。
将在同一联接查询中使用的不同表置于不同的文件组中。由于采用并行磁盘输入/输出对联接数据进行搜索,所以性能将得以改善。
将最常访问的表和属于这些表的非聚集索引置于不同的文件组上。如果文件位于不同的物理磁盘上,由于采用并行输入/输出,所以
性能得以提高。
不要将日志文件与其它文件和文件组置于同一物理磁盘上。