理學(xué)院數(shù)據(jù)庫原理上機(jī)實(shí)驗(yàn)三_第1頁
理學(xué)院數(shù)據(jù)庫原理上機(jī)實(shí)驗(yàn)三_第2頁
理學(xué)院數(shù)據(jù)庫原理上機(jī)實(shí)驗(yàn)三_第3頁
理學(xué)院數(shù)據(jù)庫原理上機(jī)實(shí)驗(yàn)三_第4頁
理學(xué)院數(shù)據(jù)庫原理上機(jī)實(shí)驗(yàn)三_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)三:索引實(shí)驗(yàn)內(nèi)容:1. 通過企業(yè)管理器創(chuàng)建索引在“學(xué)生表”學(xué)號(hào)列上創(chuàng)建名為“PK_學(xué)生表”的具有唯一值的聚集索引,文件組為PRIMARY。 2. 通過企業(yè)管理器刪除索引刪除在“學(xué)生表”學(xué)號(hào)列上創(chuàng)建的“PK_學(xué)生表”索引 3. 使用全文索引使用全文索引時(shí),需要啟動(dòng)SQL Server和Microsoft Search兩項(xiàng)服務(wù)。當(dāng)SQL Server接受全文查詢的請(qǐng)求時(shí),會(huì)將檢索的條件等信息發(fā)送給Microsoft Search服務(wù)來處理;當(dāng)Microsoft Search找到所需要的數(shù)據(jù)時(shí),再回傳給SQL Server進(jìn)行后續(xù)操作。在數(shù)據(jù)庫pubs上建立全文目錄后,在其titles表上建立全

2、文索引,要求選擇可用列title_id,創(chuàng)建一個(gè)新的全文目錄newindex。全文索引創(chuàng)建后,需要先手動(dòng)更新。刪除剛才創(chuàng)建的全文索引。附錄:索引可以利用索引快速訪問數(shù)據(jù)庫表中的特定信息。索引是對(duì)數(shù)據(jù)庫表中一個(gè)或多個(gè)列(例如,employee 表的姓氏 (lname) 列)的值進(jìn)行排序的結(jié)構(gòu)。如果想按特定職員的姓來查找他或她,則與在表中搜索所有的行相比,索引有助于更快地獲取信息。索引提供指針以指向存儲(chǔ)在表中指定列的數(shù)據(jù)值,然后根據(jù)指定的排序次序排列這些指針。數(shù)據(jù)庫使用索引的方式與使用書的目錄很相似:通過搜索索引找到特定的值,然后跟隨指針到達(dá)包含該值的行。在數(shù)據(jù)庫關(guān)系圖中,可以為選定的表創(chuàng)建、編輯

3、或刪除索引/鍵屬性頁中的每個(gè)索引類型。當(dāng)保存附加在此索引上的表或包含此表的數(shù)據(jù)庫關(guān)系圖時(shí),索引同時(shí)被保存。通常情況下,只有當(dāng)經(jīng)常查詢索引列中的數(shù)據(jù)時(shí),才需要在表上創(chuàng)建索引。索引將占用磁盤空間,并且降低添加、刪除和更新行的速度。不過在多數(shù)情況下,索引所帶來的數(shù)據(jù)檢索速度的優(yōu)勢大大超過它的不足之處。然而,如果應(yīng)用程序非常頻繁地更新數(shù)據(jù),或磁盤空間有限,那么最好限制索引的數(shù)量。索引列可基于數(shù)據(jù)庫表中的單列或多列創(chuàng)建索引。當(dāng)某些行中的某一列具有相同的值時(shí),多列索引能區(qū)分開這些行。如果經(jīng)常在同時(shí)搜索兩列或多列或按兩列或多列排序時(shí),索引也很有幫助。例如,如果經(jīng)常在同一查詢中為姓和名兩列設(shè)置準(zhǔn)則,那么在這兩

4、列上創(chuàng)建多列索引將很有意義。確定索引的有效性: 檢查查詢中的 WHERE 和 JOIN 子句。在任一子句中包括的每一列都是索引可以選擇的對(duì)象。試驗(yàn)新的索引,檢查它對(duì)運(yùn)行查詢性能的影響??紤]表中已創(chuàng)建的索引數(shù)量。最好不要在一個(gè)表中創(chuàng)建大量的索引。檢查表中已創(chuàng)建的索引定義。最好避免包含共享列的重疊索引。檢查列中唯一數(shù)據(jù)值的數(shù)量,并與表中的行數(shù)進(jìn)行比較。比較的結(jié)果就是該列的可選擇性,這有助于確定該列是否適合建立索引,如果適合,確定索引的類型是什么。 索引類型根據(jù)數(shù)據(jù)庫的功能,可在數(shù)據(jù)庫設(shè)計(jì)器中創(chuàng)建三種類型的索引 唯一索引、主鍵索引和聚集索引。盡管唯一索引有助于找到信息,但為了獲得最佳性能,建議使用主

5、鍵約束或唯一約束。唯一索引唯一索引不允許兩行具有相同的索引值。如果現(xiàn)有數(shù)據(jù)中存在重復(fù)的鍵值,則大多數(shù)數(shù)據(jù)庫都不允許將新創(chuàng)建的唯一索引與表一起保存。當(dāng)新數(shù)據(jù)將使表中的鍵值重復(fù)時(shí),數(shù)據(jù)庫也拒絕接受此數(shù)據(jù)。例如,如果在 employee 表中的職員姓氏 (lname) 列上創(chuàng)建了唯一索引,則所有職員不能同姓。主鍵索引數(shù)據(jù)庫表通常有一列或列組合,其值用來唯一標(biāo)識(shí)表中的每一行。該列稱為表的主鍵。在數(shù)據(jù)庫關(guān)系圖中為表定義一個(gè)主鍵將自動(dòng)創(chuàng)建主鍵索引,主鍵索引是唯一索引的特殊類型。主鍵索引要求主鍵中的每個(gè)值是唯一的。當(dāng)在查詢中使用主鍵索引時(shí),它還允許快速訪問數(shù)據(jù)。聚集索引在聚集索引中,表中各行的物理順序與鍵值

6、的邏輯(索引)順序相同。表只能包含一個(gè)聚集索引。如果不是聚集索引,表中各行的物理順序與鍵值的邏輯順序不匹配。聚集索引比非聚集索引有更快的數(shù)據(jù)訪問速度。全文索引對(duì) Microsoft® SQL Server 2000 數(shù)據(jù)的全文支持涉及兩個(gè)功能:對(duì)字符數(shù)據(jù)發(fā)出查詢的能力和創(chuàng)建及維護(hù)基礎(chǔ)索引以簡化這些查詢的能力。全文索引在許多地方與普通的 SQL 索引不同。普通 SQL 索引全文索引存儲(chǔ)時(shí)受定義它們所在的數(shù)據(jù)庫的控制。存儲(chǔ)在文件系統(tǒng)中,但通過數(shù)據(jù)庫管理。每個(gè)表允許有若干個(gè)普通索引。每個(gè)表只允許有一個(gè)全文索引。當(dāng)對(duì)作為其基礎(chǔ)的數(shù)據(jù)進(jìn)行插入、更新或刪除時(shí),它們自動(dòng)更新。將數(shù)據(jù)添加到全文索引稱

7、為填充,全文索引可通過調(diào)度或特定請(qǐng)求來請(qǐng)求,也可以在添加新數(shù)據(jù)時(shí)自動(dòng)發(fā)生。不分組。在同一個(gè)數(shù)據(jù)庫內(nèi)分組為一個(gè)或多個(gè)全文目錄。使用 SQL Server 企業(yè)管理器、向?qū)Щ?Transact-SQL 語句創(chuàng)建和除去。使用 SQL Server 企業(yè)管理器、向?qū)Щ虼鎯?chǔ)過程創(chuàng)建、管理和除去。這些差異使大量管理任務(wù)變得不可缺少。全文管理是在幾個(gè)層次上實(shí)施的: 服務(wù)器 可以對(duì)服務(wù)器范圍的某些屬性(如 resource_usage)加以設(shè)置,以便增加或減少全文服務(wù)所使用的系統(tǒng)資源數(shù)量。全文引擎作為名為 Microsoft 搜索的服務(wù)在 Microsoft Windows NT® Server 和

8、 Microsoft Windows® 2000 Server 上運(yùn)行。對(duì)于 Microsoft SQL Server 個(gè)人版,Microsoft 搜索服務(wù)不可用。盡管這意味著 Microsoft 搜索服務(wù)既未安裝在 Microsoft Windows 95/98 上,也未安裝在 Windows NT 工作站或 Windows 2000 Professional 客戶端上,但這些客戶端在連接到 SQL Server 標(biāo)準(zhǔn)版安裝或企業(yè)版實(shí)例時(shí)可以使用這項(xiàng)服務(wù)。數(shù)據(jù)庫 必須啟用數(shù)據(jù)庫才能使用全文服務(wù)??梢栽谝褑⒂玫臄?shù)據(jù)庫中創(chuàng)建和除去一個(gè)或多個(gè)全文目錄的元數(shù)據(jù)。全文目錄 全文目錄包含數(shù)據(jù)庫

9、中的全文索引。每個(gè)目錄可以用于數(shù)據(jù)庫內(nèi)的一個(gè)或多個(gè)表的索引需求。該目錄中的索引是使用這里介紹的管理功能來填充的。(全文目錄必須駐留在與 SQL Server 實(shí)例相關(guān)聯(lián)的本地硬盤驅(qū)動(dòng)器上。不支持可移動(dòng)的驅(qū)動(dòng)器、軟盤和網(wǎng)絡(luò)驅(qū)動(dòng)器)。在每個(gè)服務(wù)器上最多可創(chuàng)建 256 個(gè)全文目錄。 表 首先,必須為全文支持啟用表。然后,為與該表相關(guān)聯(lián)的全文索引創(chuàng)建元數(shù)據(jù)(如表名及其全文目錄)。表啟用后,可以用為全文支持而啟用的列中的數(shù)據(jù)填充它。如果表的全文定義被更改(例如,添加一個(gè)也將為全文檢索而索引的新列),則必須重新填充相關(guān)的全文目錄以使全文索引與新的全文定義同步。列 可以從非活動(dòng)的注冊(cè)表中添加或除去支持全文查

10、詢的列。在所有這些級(jí)別上,可使用工具檢索元數(shù)據(jù)和狀態(tài)信息。和常規(guī) SQL 索引一樣,當(dāng)在相關(guān)表中修改數(shù)據(jù)時(shí),可自動(dòng)更新全文索引?;蛘?,也可以適當(dāng)?shù)拈g隔手工重新填充全文索引。這種重寫可能既耗時(shí)又大量占用資源,因此,在數(shù)據(jù)庫活動(dòng)較少時(shí),這通常是在后臺(tái)運(yùn)行的異步進(jìn)程。應(yīng)將具有相同更新特性的表(如更改少的與更改多的,或在一天的特定時(shí)段內(nèi)頻繁更改的表)組合在一起,并分配給相同的全文目錄。通過以此方法設(shè)置全文目錄填充調(diào)度,使得全文索引和表保持同步,且在數(shù)據(jù)庫活動(dòng)較多時(shí)不對(duì)數(shù)據(jù)庫服務(wù)器的資源使用產(chǎn)生負(fù)面影響。為全文目錄中的表安排全文索引的位置是非常重要的。在為全文目錄指定表時(shí),應(yīng)該注意下列基本原則: 始終選

11、擇可用于全文唯一鍵的最小唯一索引。(4 個(gè)字節(jié)且基于整數(shù)的索引是最佳的。)這將顯著減少文件系統(tǒng)中 Microsoft 搜索服務(wù)所需要的資源。如果主鍵很大(超過 100 字節(jié)),可以考慮選擇表中其它唯一索引(或創(chuàng)建另一個(gè)唯一索引)作為全文唯一鍵。否則,如果全文唯一鍵的大小達(dá)到允許的上限(450 字節(jié)),全文填充將無法繼續(xù)進(jìn)行。如果進(jìn)行索引的表有成千上萬行,請(qǐng)將該表指定給其自己的全文目錄。應(yīng)該考慮對(duì)其進(jìn)行全文索引的表中發(fā)生的更改數(shù)以及表的行數(shù)。如果要更改的總行數(shù),加上上次全文填充期間表中出現(xiàn)的行數(shù)達(dá)到成千上萬行,請(qǐng)將該表指定給其自己的全文目錄。 索引鍵的最大值Microsoft SQL Serve

12、r 2000 保留 900 字節(jié)的最大索引鍵值限制,但更改了 CREATE INDEX 檢查指定索引鍵是否超出允許的 900 字節(jié)最大鍵值時(shí)所使用的算法。新的 CREATE INDEX 算法與用于 CREATE TABLE 的行大小算法類似。在創(chuàng)建索引時(shí),SQL Server 檢查下列條件: 所有參與索引定義的固定數(shù)據(jù)列的總長度必須小于或等于 900 字節(jié)。當(dāng)所要?jiǎng)?chuàng)建的索引只由固定數(shù)據(jù)列構(gòu)成時(shí),固定數(shù)據(jù)列的總計(jì)大小必須小于或等于 900 字節(jié)。否則將不能創(chuàng)建索引,且 SQL Server 將返回錯(cuò)誤。如果索引定義由固定類型列和可變類型列組成,且固定數(shù)據(jù)列滿足前面的條件(小于或等于 900 字節(jié)

13、),則 SQL Server 仍要檢查可變類型列的總大小。如果可變類型列的最大大小與固定數(shù)據(jù)列大小的和大于 900 字節(jié),則 SQL Server 將創(chuàng)建索引,不過將給用戶返回警告消息以提醒用戶:如果隨后在可變類型列上的插入或更新操作導(dǎo)致總大小超過 900 字節(jié),則操作將失敗且用戶將收到運(yùn)行時(shí)錯(cuò)誤。同樣,如果索引定義只由可變類型列組成,且這些列的最大總大小大于 900 字節(jié),則 SQL Server 將創(chuàng)建索引,不過將返回警告消息。 代碼法創(chuàng)建、刪除索引CREATE INDEX為給定表或視圖創(chuàng)建索引。只有表或視圖的所有者才能為表創(chuàng)建索引。表或視圖的所有者可以隨時(shí)創(chuàng)建索引,無論表中是否有數(shù)據(jù)???/p>

14、以通過指定限定的數(shù)據(jù)庫名稱,為另一個(gè)數(shù)據(jù)庫中的表或視圖創(chuàng)建索引。語法:CREATE UNIQUE CLUSTERED | NONCLUSTERED INDEX index_nameON table | view ( column ASC | DESC ,.n ) WITH < index_option > ,.n ON filegroup < index_option > := PAD_INDEX |        FILLFACTOR = fillfactor |  &

15、#160;     IGNORE_DUP_KEY |        DROP_EXISTING |    STATISTICS_NORECOMPUTE |    SORT_IN_TEMPDB 參數(shù)UNIQUE為表或視圖創(chuàng)建唯一索引(不允許存在索引值相同的兩行)。視圖上的聚集索引必須是 UNIQUE 索引。在創(chuàng)建索引時(shí),如果數(shù)據(jù)已存在,Microsoft® SQL Se

16、rver 會(huì)檢查是否有重復(fù)值,并在每次使用 INSERT 或 UPDATE 語句添加數(shù)據(jù)時(shí)進(jìn)行這種檢查。如果存在重復(fù)的鍵值,將取消 CREATE INDEX 語句,并返回錯(cuò)誤信息,給出第一個(gè)重復(fù)值。當(dāng)創(chuàng)建 UNIQUE 索引時(shí),有多個(gè) NULL 值被看作副本。如果存在唯一索引,那么會(huì)產(chǎn)生重復(fù)鍵值的 UPDATE 或 INSERT 語句將回滾,SQL Server 將顯示錯(cuò)誤信息。即使 UPDATE 或 INSERT 語句更改了許多行但只產(chǎn)生了一個(gè)重復(fù)值,也會(huì)出現(xiàn)這種情況。如果在有唯一索引并且指定了 IGNORE_DUP_KEY 子句情況下輸入數(shù)據(jù),則只有違反 UNIQUE 索引的行才會(huì)失敗。在

17、處理 UPDATE 語句時(shí),IGNORE_DUP_KEY 不起作用。SQL Server 不允許為已經(jīng)包含重復(fù)值的列創(chuàng)建唯一索引,無論是否設(shè)置了 IGNORE_DUP_KEY。如果嘗試這樣做,SQL Server 會(huì)顯示錯(cuò)誤信息;重復(fù)值必須先刪除,才能為這些列創(chuàng)建唯一索引。CLUSTERED創(chuàng)建一個(gè)對(duì)象,其中行的物理排序與索引排序相同,并且聚集索引的最低一級(jí)(葉級(jí))包含實(shí)際的數(shù)據(jù)行。一個(gè)表或視圖只允許同時(shí)有一個(gè)聚集索引。具有聚集索引的視圖稱為索引視圖。必須先為視圖創(chuàng)建唯一聚集索引,然后才能為該視圖定義其它索引。在創(chuàng)建任何非聚集索引之前創(chuàng)建聚集索引。創(chuàng)建聚集索引時(shí)重建表上現(xiàn)有的非聚集索引。如果沒

18、有指定 CLUSTERED,則創(chuàng)建非聚集索引。說明  因?yàn)榘凑斩x,聚集索引的葉級(jí)與其數(shù)據(jù)頁相同,所以創(chuàng)建聚集索引時(shí)使用 ON filegroup 子句實(shí)際上會(huì)將表從創(chuàng)建該表時(shí)所用的文件移到新的文件組中。在特定的文件組上創(chuàng)建表或索引之前,應(yīng)確認(rèn)哪些文件組可用并且有足夠的空間供索引使用。文件組的大小必須至少是整個(gè)表所需空間的 1.2 倍,這一點(diǎn)很重要。NONCLUSTERED創(chuàng)建一個(gè)指定表的邏輯排序的對(duì)象。對(duì)于非聚集索引,行的物理排序獨(dú)立于索引排序。非聚集索引的葉級(jí)包含索引行。每個(gè)索引行均包含非聚集鍵值和一個(gè)或多個(gè)行定位器(指向包含該值的行)。如果表沒有聚集索引,行定位器就是

19、行的磁盤地址。如果表有聚集索引,行定位器就是該行的聚集索引鍵。每個(gè)表最多可以有 249 個(gè)非聚集索引(無論這些非聚集索引的創(chuàng)建方式如何:是使用 PRIMARY KEY 和 UNIQUE 約束隱式創(chuàng)建,還是使用 CREATE INDEX 顯式創(chuàng)建)。每個(gè)索引均可以提供對(duì)數(shù)據(jù)的不同排序次序的訪問。對(duì)于索引視圖,只能為已經(jīng)定義了聚集索引的視圖創(chuàng)建非聚集索引。因此,索引視圖中非聚集索引的行定位器一定是行的聚集鍵。index_name是索引名。索引名在表或視圖中必須唯一,但在數(shù)據(jù)庫中不必唯一。索引名必須遵循標(biāo)識(shí)符規(guī)則。table包含要?jiǎng)?chuàng)建索引的列的表。可以選擇指定數(shù)據(jù)庫和表所有者。view要建立索引的視

20、圖的名稱。必須使用 SCHEMABINDING 定義視圖才能在視圖上創(chuàng)建索引。視圖定義也必須具有確定性。如果選擇列表中的所有表達(dá)式、WHERE 和 GROUP BY 子句都具有確定性,則視圖也具有確定性。而且,所有鍵列必須是精確的。只有視圖的非鍵列可能包含浮點(diǎn)表達(dá)式(使用 float 數(shù)據(jù)類型的表達(dá)式),而且 float 表達(dá)式不能在視圖定義的其它任何位置使用。若要在確定性視圖中查找列,請(qǐng)使用 COLUMNPROPERTY 函數(shù)(IsDeterministic 屬性)。該函數(shù)的 IsPrecise 屬性可用來確定鍵列是否精確。必須先為視圖創(chuàng)建唯一的聚集索引,才能為該視圖創(chuàng)建非聚集索引。 在 S

21、QL Server 企業(yè)版或開發(fā)版中,查詢優(yōu)化器可使用索引視圖加快查詢的執(zhí)行速度。要使優(yōu)化程序考慮將該視圖作為替換,并不需要在查詢中引用該視圖。在創(chuàng)建索引視圖或?qū)⑴c索引視圖的表中的行進(jìn)行操作時(shí),有 7 個(gè) SET 選項(xiàng)必須指派特定的值。SET 選項(xiàng) ARITHABORT、CONCAT_NULL_YIELDS_NULL、QUOTED_IDENTIFIER、ANSI_NULLS、ANSI_PADDING和ANSI_WARNING 必須為ON。SET 選項(xiàng) NUMERIC_ROUNDABORT 必須為 OFF。如果與上述設(shè)置有所不同,對(duì)索引視圖所引用的任何表執(zhí)行的數(shù)據(jù)修改語句 (INSERT、UP

22、DATE、DELETE) 都將失敗,SQL Server 會(huì)顯示一條錯(cuò)誤信息,列出所有違反設(shè)置要求的 SET 選項(xiàng)。此外,對(duì)于涉及索引視圖的 SELECT 語句,如果任何 SET 選項(xiàng)的值不是所需的值,則 SQL Server 在處理該 SELECT 語句時(shí)不考慮索引視圖替換。在受上述 SET 選項(xiàng)影響的情況中,這將確保查詢結(jié)果的正確性。如果應(yīng)用程序使用 DB-Library 連接,則必須為服務(wù)器上的所有 7 個(gè) SET 選項(xiàng)指派所需的值。(默認(rèn)情況下,OLE DB 和 ODBC 連接已經(jīng)正確設(shè)置了除 ARITHABORT 外所有需要的 SET 選項(xiàng)。)如果并非所有上述 SET 選項(xiàng)均有所需的

23、值,則某些操作(例如 BCP、復(fù)制或分布式查詢)可能無法對(duì)參與索引視圖的表執(zhí)行更新。在大多數(shù)情況下,將 ARITHABORT 設(shè)置為 ON(通過服務(wù)器配置選項(xiàng)中的 user options)可以避免這一問題。 強(qiáng)烈建議在服務(wù)器的任一數(shù)據(jù)庫中創(chuàng)建計(jì)算列上的第一個(gè)索引視圖或索引后,盡早在服務(wù)器范圍內(nèi)將 ARITHABORT 用戶選項(xiàng)設(shè)置為 ON。column應(yīng)用索引的列。指定兩個(gè)或多個(gè)列名,可為指定列的組合值創(chuàng)建組合索引。在 table 后的圓括號(hào)中列出組合索引中要包括的列(按排序優(yōu)先級(jí)排列)。 說明  由 ntext、text 或 image 數(shù)據(jù)類型組成的列不能指定為索引列

24、。另外,視圖不能包括任何 text、ntext 或 image 列,即使在 CREATE INDEX 語句中沒有引用這些列。 當(dāng)兩列或多列作為一個(gè)單位搜索最好,或者許多查詢只引用索引中指定的列時(shí),應(yīng)使用組合索引。最多可以有 16 個(gè)列組合到一個(gè)組合索引中。組合索引中的所有列必須在同一個(gè)表中。組合索引值允許的最大大小為 900 字節(jié)。也就是說,組成組合索引的固定大小列的總長度不得超過 900 字節(jié)。有關(guān)組合索引中可變類型列的更多信息,請(qǐng)參見注釋部分。ASC | DESC確定具體某個(gè)索引列的升序或降序排序方向。默認(rèn)設(shè)置為 ASC。n表示可以為特定索引指定多個(gè) columns 的占位符。PAD_IN

25、DEX指定索引中間級(jí)中每個(gè)頁(節(jié)點(diǎn))上保持開放的空間。PAD_INDEX 選項(xiàng)只有在指定了 FILLFACTOR 時(shí)才有用,因?yàn)?PAD_INDEX 使用由 FILLFACTOR 所指定的百分比。默認(rèn)情況下,給定中間級(jí)頁上的鍵集,SQL Server 將確保每個(gè)索引頁上的可用空間至少可以容納一個(gè)索引允許的最大行。如果為 FILLFACTOR 指定的百分比不夠大,無法容納一行,SQL Server 將在內(nèi)部使用允許的最小值替代該百分比。 說明  中間級(jí)索引頁上的行數(shù)永遠(yuǎn)都不會(huì)小于兩行,無論 FILLFACTOR 的值有多小。FILLFACTOR = fillfactor指定在

26、 SQL Server 創(chuàng)建索引的過程中,各索引頁葉級(jí)的填滿程度。如果某個(gè)索引頁填滿,SQL Server 就必須花時(shí)間拆分該索引頁,以便為新行騰出空間,這需要很大的開銷。對(duì)于更新頻繁的表,選擇合適的 FILLFACTOR 值將比選擇不合適的 FILLFACTOR 值獲得更好的更新性能。FILLFACTOR 的原始值將在 sysindexes 中與索引一起存儲(chǔ)。如果指定了 FILLFACTOR,SQL Server 會(huì)向上舍入每頁要放置的行數(shù)。例如,發(fā)出 CREATE CLUSTERED INDEX .FILLFACTOR = 33 將創(chuàng)建一個(gè) FILLFACTOR 為 33% 的聚集索引。假

27、設(shè) SQL Server 計(jì)算出每頁空間的 33% 為 5.2 行。SQL Server 將其向上舍入,這樣,每頁就放置 6 行。說明  顯式的 FILLFACTOR 設(shè)置只是在索引首次創(chuàng)建時(shí)應(yīng)用。SQL Server 并不會(huì)動(dòng)態(tài)保持頁上可用空間的指定百分比。用戶指定的 FILLFACTOR 值可以從 1 到 100。如果沒有指定值,默認(rèn)值為 0。如果 FILLFACTOR 設(shè)置為 0,則只填滿葉級(jí)頁。可以通過執(zhí)行 sp_configure 更改默認(rèn)的 FILLFACTOR 設(shè)置。只有不會(huì)出現(xiàn) INSERT 或 UPDATE 語句時(shí)(例如對(duì)只讀表),才可以使用 FILLFA

28、CTOR 100。如果 FILLFACTOR 為 100,SQL Server 將創(chuàng)建葉級(jí)頁 100% 填滿的索引。如果在創(chuàng)建 FILLFACTOR 為 100% 的索引之后執(zhí)行 INSERT 或 UPDATE,會(huì)對(duì)每次 INSERT 操作以及有可能每次 UPDATE 操作進(jìn)行頁拆分。如果 FILLFACTOR 值較?。? 除外),就會(huì)使 SQL Server 創(chuàng)建葉級(jí)頁不完全填充的新索引。例如,如果已知某個(gè)表包含的數(shù)據(jù)只是該表最終要包含的數(shù)據(jù)的一小部分,那么為該表創(chuàng)建索引時(shí),F(xiàn)ILLFACTOR 為 10 會(huì)是合理的選擇。FILLFACTOR 值較小還會(huì)使索引占用較多的存儲(chǔ)空間。下表說明如何

29、在已指定 FILLFACTOR 的情況下填充索引頁。 FILLFACTOR中間級(jí)頁葉級(jí)頁0一個(gè)可用項(xiàng)100% 填滿1% -99一個(gè)可用項(xiàng)<= FILLFACTOR% 填滿100%一個(gè)可用項(xiàng)100% 填滿一個(gè)可用項(xiàng)是指頁上可以容納另一個(gè)索引項(xiàng)的空間。重要  用某個(gè) FILLFACTOR 值創(chuàng)建聚集索引會(huì)影響數(shù)據(jù)占用存儲(chǔ)空間的數(shù)量,因?yàn)?SQL Server 在創(chuàng)建聚集索引時(shí)會(huì)重新分布數(shù)據(jù)。IGNORE_DUP_KEY控制當(dāng)嘗試向?qū)儆谖ㄒ痪奂饕牧胁迦胫貜?fù)的鍵值時(shí)所發(fā)生的情況。如果為索引指定了 IGNORE_DUP_KEY,并且執(zhí)行了創(chuàng)建重復(fù)鍵的 INSERT 語句,S

30、QL Server 將發(fā)出警告消息并忽略重復(fù)的行。如果沒有為索引指定 IGNORE_DUP_KEY,SQL Server 會(huì)發(fā)出一條警告消息,并回滾整個(gè) INSERT 語句。下表顯示何時(shí)可使用 IGNORE_DUP_KEY。索引類型選項(xiàng)聚集不允許唯一聚集允許使用 IGNORE_DUP_KEY非聚集不允許唯一非聚集允許使用 IGNORE_DUP_KEYDROP_EXISTING指定應(yīng)除去并重建已命名的先前存在的聚集索引或非聚集索引。指定的索引名必須與現(xiàn)有的索引名相同。因?yàn)榉蔷奂饕奂I,所以在除去聚集索引時(shí),必須重建非聚集索引。如果重建聚集索引,則必須重建非聚集索引,以便使用新的鍵集。 為

31、已經(jīng)具有非聚集索引的表重建聚集索引時(shí)(使用相同或不同的鍵集),DROP_EXISTING 子句可以提高性能。DROP_EXISTING 子句代替了先對(duì)舊的聚集索引執(zhí)行 DROP INDEX 語句,然后再對(duì)新的聚集索引執(zhí)行 CREATE INDEX 語句的過程。非聚集索引只需重建一次,而且還只是在鍵不同的情況下才需要。如果鍵沒有改變(提供的索引名和列與原索引相同),則 DROP_EXISTING 子句不會(huì)重新對(duì)數(shù)據(jù)進(jìn)行排序。在必須壓縮索引時(shí),這樣做會(huì)很有用。 無法使用 DROP_EXISTING 子句將聚集索引轉(zhuǎn)換成非聚集索引;不過,可以將唯一聚集索引更改為非唯一索引,反之亦然。 說明 

32、; 當(dāng)執(zhí)行帶 DROP_EXISTING 子句的 CREATE INDEX 語句時(shí),SQL Server 假定索引是一致的(即索引沒有損壞)。指定索引中的行應(yīng)按 CREATE INDEX 語句中引用的指定鍵排序。STATISTICS_NORECOMPUTE指定過期的索引統(tǒng)計(jì)不會(huì)自動(dòng)重新計(jì)算。若要恢復(fù)自動(dòng)更新統(tǒng)計(jì),可執(zhí)行沒有 NORECOMPUTE 子句的 UPDATE STATISTICS。重要  如果禁用分布統(tǒng)計(jì)的自動(dòng)重新計(jì)算,可能會(huì)妨礙 SQL Server 查詢優(yōu)化器為涉及該表的查詢選取最佳執(zhí)行計(jì)劃。SORT_IN_TEMPDB指定用于生成索引的中間排序結(jié)果將存儲(chǔ)在 tempdb 數(shù)據(jù)庫中。如果 tempdb 與用戶數(shù)據(jù)庫不在同一磁盤集,則此選項(xiàng)可能減少創(chuàng)建索引所需的時(shí)間,但會(huì)增加創(chuàng)建索引時(shí)使用的磁盤空間。ON filegroup在給定的 filegroup 上創(chuàng)建指定的索引。該文件組必須已經(jīng)通過執(zhí)行 CREATE DATABASE 或 ALTER DATABASE 創(chuàng)建。注釋為表或索引分配空間時(shí),每次遞增

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論