這些天什么都沒做。年前似乎有忙不完的事,年后了卻又有了好逸的毛病。。。。
今天才開始看學校實驗指導的數(shù)據(jù)庫開發(fā)實例。以前一直沒有時間來看。。。
創(chuàng)建表的語句中,最后總來一句on[primary],這是什么意思?
翻翻聯(lián)機叢書。在CREATE TABLE的語法下似乎沒有找到。硬著頭皮看下去,終于明白了一些。
寫出來吧。侯捷老師說,發(fā)表是最好的記憶。:)
在CREATE TABLE的語法中有這樣一句可選語法項目:
[ ON { filegroup | DEFAULT } ]
用來指定存儲表的文件組。
如果指定 filegroup,則表將存儲在指定的文件組中。數(shù)據(jù)庫中必須存在該文件組。如果指定 DEFAULT,或者根本未指定 ON 參數(shù),則表存儲在默認文件組中。
(DEFAULT 并不是關鍵字。DEFAULT 是默認文件組的標識符并需對其進行定界,如 ON "DEFAULT"、ON [DEFAULT]。)
ON [PRIMARY]是表示表是建立在主文件組上。PRIMARY表示主文件組。如果沒有指定默認文件組,則主文件組是默認文件組,ON [PRIMARY]也可以省略掉了。
由數(shù)據(jù)庫說開來。Microsoft? SQL Server? 2000 使用一組操作系統(tǒng)文件映射數(shù)據(jù)庫,也可以說將數(shù)據(jù)庫映射到一組操作系統(tǒng)文件上(看你怎么理解了)。數(shù)據(jù)庫中的所有數(shù)據(jù)和對象(如表、存儲過程、觸發(fā)器和視圖)都存儲在操作系統(tǒng)文件(數(shù)據(jù)庫文件):主要數(shù)據(jù)文件 、次要數(shù)據(jù)文件 和事務日志 文件中。
1.主要數(shù)據(jù)文件
該文件包含數(shù)據(jù)庫的啟動信息,并用于存儲數(shù)據(jù)。是數(shù)據(jù)庫的起點,指向數(shù)據(jù)庫中文件的其它部分。每個數(shù)據(jù)庫都有一個主要數(shù)據(jù)文件。主要數(shù)據(jù)文件的推薦文件擴展名是 .mdf。
2.次要數(shù)據(jù)文件
這些文件含有不能置于主要數(shù)據(jù)文件中的所有數(shù)據(jù)即包含除主要數(shù)據(jù)文件外的所有數(shù)據(jù)文件。有些數(shù)據(jù)庫可能沒有次要數(shù)據(jù)文件,而有些數(shù)據(jù)庫則有多個次要數(shù)據(jù)文件。(如果主文件可以包含數(shù)據(jù)庫中的所有數(shù)據(jù),那么數(shù)據(jù)庫就不需要次要數(shù)據(jù)文件。有些數(shù)據(jù)庫可能足夠大故需要多個次要數(shù)據(jù)文件,或使用位于不同磁盤驅動器上的輔助文件將數(shù)據(jù)擴展到多個磁盤。)次要數(shù)據(jù)文件的推薦文件擴展名是 .ndf。
3.事務日志文件
該數(shù)據(jù)庫的日志信息。每個數(shù)據(jù)庫都必須至少有一個日志文件。日志文件的推薦文件擴展名是 .ldf。
文件組
出于分配和管理目的,可以將數(shù)據(jù)庫文件分成不同的文件組。文件組是SQL Server 2000數(shù)據(jù)文件的一種邏輯管理單位。SQL Server中一個或多個文件的命名集合,它構成分配或用于數(shù)據(jù)庫管理的單個單元。在首次建數(shù)據(jù)庫,或者以后將更多文件添加到數(shù)據(jù)庫時,可以創(chuàng)建文件組。文件組不能獨立于數(shù)據(jù)庫文件創(chuàng)建。文件組是在數(shù)據(jù)庫中對文件進行分組的一種管理機制。
有兩種類型的文件組:主要文件組和用戶定義文件組。(可以說,數(shù)據(jù)庫由一個主文件組和任意用戶定義的文件組組成。)
1.主文件組 (PRIMARY)
用戶定義文件組 默認文件組 同為文件組的一種類型。
其包含主要數(shù)據(jù)文件和任何沒有明確指派給其它文件組的其它文件。系統(tǒng)表的所有頁均分配在主文件組.
2.用戶定義文件組
用戶定義文件組是在 CREATE DATABASE 或 ALTER DATABASE 語句中,使用 FILEGROUP 關鍵字或在 SQL Server 企業(yè)管理器內的"屬性"對話框指定的文件組。
另:默認文件組 (DEFAULT 文件組)
文件組的一種類型,其包含在創(chuàng)建時沒有指定文件組的所有表和索引的頁。在每個數(shù)據(jù)庫中,每次只能有一個文件組是默認文件組。如果沒有指定默認文件組,則默認文件組是主文件組。 可用 ALTER DATABASE 語句更改默認文件組。通過更改默認文件組,創(chuàng)建時沒有指定文件組的任何對象都被分配到新默認文件組中的數(shù)據(jù)文件。然而,系統(tǒng)對象和表仍然保留在 PRIMARY 文件組內,而不是新默認文件組。(每個數(shù)據(jù)庫中都有一個文件組作為默認文件組運行。當 SQL Server 給創(chuàng)建時沒有為其指定文件組的表或索引分配頁時,將從默認文件組中進行分配。一次只能有一個文件組作為默認文件組。db_owner 固定數(shù)據(jù)庫角色成員可以將默認文件組從一個文件組切換到另一個。如果沒有指定默認文件組,則主文件組是默認文件組。)
注:SQL Server 2000 在沒有文件組時也能有效地工作,因此許多系統(tǒng)不需要指定用戶定義文件組。在這種情況下,所有文件都包含在主文件組中,而且 SQL Server 2000 可以在數(shù)據(jù)庫內的任何位置分配數(shù)據(jù)。文件組不是在多個驅動器之間分配 I/O 的唯一方法。
附:
. 為什么要建立文件組
建立文件組有兩個目的。
q 一是可以更好地分配和管理存儲空間,通過控制在特定磁盤驅動器上放置數(shù)據(jù)和索引來提高數(shù)據(jù)庫的性能。
q 二是由于操作系統(tǒng)對物理文件的大小進行了限制,所以當某個磁盤上的數(shù)據(jù)文件超過單個文件允許的最大值時,可以使用文件組中存
貯在其他驅動器上的數(shù)據(jù)文件繼續(xù)擴充存儲空間。
. 數(shù)據(jù)文件和文件組的使用規(guī)則
SQL Server 2000中的數(shù)據(jù)文件和文件組的使用規(guī)則包括:
q 數(shù)據(jù)文件或文件組不能由一個以上的數(shù)據(jù)庫使用。
q 數(shù)據(jù)文件只能是一個文件組的成員。
q 數(shù)據(jù)文件和日志文件不能屬于同一文件或文件組。
q 日志文件不能屬于任何文件組。
q 只有文件組中的所有數(shù)據(jù)文件都沒有空間了,文件組的文件才會自動增長。
. 文件組的工作原理
文件組對組內的所有文件都使用按比例填充策略。當將數(shù)據(jù)寫入文件組時,SQL Server 2000根據(jù)文件中的可用空間量將一定比例的數(shù)據(jù)寫入文
件組的每個文件,而不是將所有的數(shù)據(jù)先寫滿第一個文件,接著再寫入下一個文件。例如,如果文件1有100MB的可用空間,文件2有200MB的可
用空間,則從文件1中分配一個盤區(qū),從文件2中分配兩個盤區(qū),依此類推。這樣,兩個文件幾乎同時填滿。
一旦文件組內的所有文件已滿,SQL Server 2000就自動地采用循環(huán)方式一次擴展一個文件,以容納更多的數(shù)據(jù)(假定數(shù)據(jù)庫設置為自動增長)
。例如,某個文件組由3個文件組成,它們都設置為自動增長。當文件組中的所有文件的空間用完時,只擴展第一個文件。當?shù)谝粋€文件已滿,
不能將更多的數(shù)據(jù)寫入該文件組時,擴展第二個文件。當?shù)诙€文件已滿,不能將更多的數(shù)據(jù)寫入該文件組時,擴展第3個文件。如果第3個文
件已滿,不能將更多的數(shù)據(jù)寫入該文件組,那么再次擴展第一個文件,以此類推。
正時由于文件組的這種特性,允許跨多個磁盤、多個磁盤控制器或 RAID(廉價磁盤冗余陣列)系統(tǒng)創(chuàng)建數(shù)據(jù)庫,可提高數(shù)據(jù)庫性能。例如,如
果計算機中有4個磁盤,那么可以創(chuàng)建一個由3個數(shù)據(jù)文件和一個日志文件組成的數(shù)據(jù)庫,每個磁盤上放置一個文件。在對數(shù)據(jù)進行訪問時,四
個讀/寫磁頭可以同時并行地訪問數(shù)據(jù),從而加速數(shù)據(jù)庫操作。
另外,文件和文件組允許數(shù)據(jù)布局,可以在特定的文件組中創(chuàng)建表。因為特定表的所有輸入/輸出都可以定向到特定的磁盤,所以性能得以改善
。例如,可以將最常用的表放在一個文件組中的一個文件中,該文件組位于一個磁盤上;而將數(shù)據(jù)庫中其它的不常訪問的表放在另一個文件組
中的其它文件中,該文件組位于第二個磁盤上。
. 如何使用文件組的建議
q 大多數(shù)數(shù)據(jù)庫在只有單個數(shù)據(jù)文件和單個事務日志文件的情況下可以很好地運行。
q 如果使用多個文件,請為附加文件創(chuàng)建第二個文件組,并將其設置為默認文件組。這樣,主文件將僅包含系統(tǒng)表和對象。
q 若要獲得最佳性能,請在盡可能多的可用本地物理磁盤上創(chuàng)建文件或文件組,并將爭奪空間最激烈的對象置于不同的文件組中。
q 使用文件組以允許將對象放置在特定的物理磁盤上。
q 將在同一聯(lián)接查詢中使用的不同表置于不同的文件組中。由于采用并行磁盤輸入/輸出對聯(lián)接數(shù)據(jù)進行搜索,所以性能將得以改善。
q 將最常訪問的表和屬于這些表的非聚集索引置于不同的文件組上。如果文件位于不同的物理磁盤上,由于采用并行輸入/輸出,所以
性能得以提高。
q 不要將日志文件與其它文件和文件組置于同一物理磁盤上。