網(wǎng)絡(luò)數(shù)據(jù)庫_10 SQL server建立索引_第1頁
網(wǎng)絡(luò)數(shù)據(jù)庫_10 SQL server建立索引_第2頁
網(wǎng)絡(luò)數(shù)據(jù)庫_10 SQL server建立索引_第3頁
網(wǎng)絡(luò)數(shù)據(jù)庫_10 SQL server建立索引_第4頁
網(wǎng)絡(luò)數(shù)據(jù)庫_10 SQL server建立索引_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、索引索引索引n回顧新華字典查字法!n 如 “張” 字的搜索方法!n 第一種 n 第二種Sequential File201040306050807010090Sparse Index1030507090110130150170190210230索引的創(chuàng)建和使用索引的創(chuàng)建和使用本章學(xué)習(xí)目標n了解索引的概念了解索引的概念n了解索引的優(yōu)點了解索引的優(yōu)點n掌握索引的分類掌握索引的分類n掌握創(chuàng)建、修改和刪除索引的方法掌握創(chuàng)建、修改和刪除索引的方法索引的概念n在數(shù)據(jù)庫中,如果想在某個表中快速查找滿足在數(shù)據(jù)庫中,如果想在某個表中快速查找滿足條件的記錄,可以創(chuàng)建索引。索引可以使數(shù)據(jù)條件的記錄,可以創(chuàng)建索引。索

2、引可以使數(shù)據(jù)庫程序無須對整個表進行掃描,就可以在其中庫程序無須對整個表進行掃描,就可以在其中找到所需數(shù)據(jù)。創(chuàng)建索引可以加快從表或視圖找到所需數(shù)據(jù)。創(chuàng)建索引可以加快從表或視圖中檢索數(shù)據(jù)的速度。索引包含由表或視圖中的中檢索數(shù)據(jù)的速度。索引包含由表或視圖中的一列或多列生成的鍵。一列或多列生成的鍵。索引的概念n當當SQL Server進行數(shù)據(jù)查詢時,查詢優(yōu)化器進行數(shù)據(jù)查詢時,查詢優(yōu)化器會自動計算現(xiàn)有的幾種執(zhí)行查詢方案中,哪種會自動計算現(xiàn)有的幾種執(zhí)行查詢方案中,哪種方案的開銷最小,速度最快,然后方案的開銷最小,速度最快,然后SQL Server就會按照該方案來查詢。所以,可以通就會按照該方案來查詢。所以

3、,可以通過高效的有序查找算法(如折半查找等)找到過高效的有序查找算法(如折半查找等)找到索引項,再根據(jù)索引項中記錄的物理地址,找索引項,再根據(jù)索引項中記錄的物理地址,找到查詢結(jié)果的存儲位置。到查詢結(jié)果的存儲位置。索引的優(yōu)點n使用索引可以大大提高系統(tǒng)的性能,其具體表現(xiàn)在:使用索引可以大大提高系統(tǒng)的性能,其具體表現(xiàn)在:n可以大大加快數(shù)據(jù)檢索速度??梢源蟠蠹涌鞌?shù)據(jù)檢索速度。n通過創(chuàng)建唯一索引,可以保證數(shù)據(jù)記錄的唯一性。通過創(chuàng)建唯一索引,可以保證數(shù)據(jù)記錄的唯一性。n在使用在使用ORDER BY和和GROUP BY子句進行檢索數(shù)據(jù)子句進行檢索數(shù)據(jù)時,可以顯著減少查詢中分組和排序的時間。時,可以顯著減少查

4、詢中分組和排序的時間。n使用索引可以在檢索數(shù)據(jù)的過程中使用優(yōu)化隱藏器,使用索引可以在檢索數(shù)據(jù)的過程中使用優(yōu)化隱藏器,提高系統(tǒng)性能。提高系統(tǒng)性能。索引的優(yōu)點n可以加速表與表之間的連接。可以加速表與表之間的連接。n建立索引的一般原則是:建立索引的一般原則是:n對經(jīng)常用來檢索的字段建立索引。對經(jīng)常用來檢索的字段建立索引。n對數(shù)據(jù)表中的主鍵建立索引。對數(shù)據(jù)表中的主鍵建立索引。n對數(shù)據(jù)表中的外鍵建立索引。對數(shù)據(jù)表中的外鍵建立索引。n對經(jīng)常用于連接的字段建立索引。對經(jīng)常用于連接的字段建立索引。索引的分類n在在SQL Server 2005中提供的索引類型主要有以下幾中提供的索引類型主要有以下幾類:聚集索引

5、、非聚集索引、唯一索引、包含性列索類:聚集索引、非聚集索引、唯一索引、包含性列索引、索引視圖、全文索引以及引、索引視圖、全文索引以及XML索引。索引。n1聚集索引和非聚集索引聚集索引和非聚集索引n按照存儲結(jié)構(gòu)的不同,可以將索引分為兩類:聚集索按照存儲結(jié)構(gòu)的不同,可以將索引分為兩類:聚集索引和非聚集索引。每個表最多可以有引和非聚集索引。每個表最多可以有1個聚集索引和個聚集索引和249個非聚集索引。其中包括為支持表中所定義的個非聚集索引。其中包括為支持表中所定義的PRIMARY KEY和和UNIQUE約束而生成的索引。約束而生成的索引。索引的分類n聚集索引對表在物理數(shù)據(jù)頁中的數(shù)據(jù)按列進行排序,聚集

6、索引對表在物理數(shù)據(jù)頁中的數(shù)據(jù)按列進行排序,然后再重新存儲到磁盤上。一個表只能有一個聚集索然后再重新存儲到磁盤上。一個表只能有一個聚集索引。用聚集索引查找數(shù)據(jù)很快。聚集索引一般創(chuàng)建在引。用聚集索引查找數(shù)據(jù)很快。聚集索引一般創(chuàng)建在表中經(jīng)常搜索的列或者按順序訪問的列上。表中經(jīng)常搜索的列或者按順序訪問的列上。n創(chuàng)建聚集索引時應(yīng)該考慮以下幾個因素:創(chuàng)建聚集索引時應(yīng)該考慮以下幾個因素:n每個表只能有一個聚集索引。每個表只能有一個聚集索引。n創(chuàng)建任何非聚集索引之前要首先創(chuàng)建聚集索引。創(chuàng)建任何非聚集索引之前要首先創(chuàng)建聚集索引。n關(guān)鍵值的唯一性使用關(guān)鍵值的唯一性使用UNIQUE關(guān)鍵字或者由內(nèi)部的唯關(guān)鍵字或者由內(nèi)

7、部的唯一標識符明確維護。一標識符明確維護。n要保證有足夠的空間創(chuàng)建聚集索引。要保證有足夠的空間創(chuàng)建聚集索引。索引的分類n使用非聚集索引不會影響數(shù)據(jù)表中記錄的實際使用非聚集索引不會影響數(shù)據(jù)表中記錄的實際存儲順序。非聚集索引中存儲了組成非聚集索存儲順序。非聚集索引中存儲了組成非聚集索引的關(guān)鍵字值和行定位器。由于非聚集索引使引的關(guān)鍵字值和行定位器。由于非聚集索引使用索引頁存儲,因此它比聚集索引需要較少的用索引頁存儲,因此它比聚集索引需要較少的存儲空間,但檢索效率比聚集索引低。由于一存儲空間,但檢索效率比聚集索引低。由于一個表只能建一個聚集索引,當用戶需要建立多個表只能建一個聚集索引,當用戶需要建立多

8、個索引時,就需要使用非聚集索引了。每個表個索引時,就需要使用非聚集索引了。每個表中最多只能創(chuàng)建中最多只能創(chuàng)建249個非聚集索引。個非聚集索引。索引的分類n在下列情況下,可以考慮使用非聚集索引:在下列情況下,可以考慮使用非聚集索引:n含有大量唯一值的字段。含有大量唯一值的字段。n返回很小的或者單行結(jié)果集的檢索。返回很小的或者單行結(jié)果集的檢索。n使用使用ORDER BY子句的查詢。子句的查詢。索引的分類n2唯一索引唯一索引n如果要求索引中的字段值不能重復(fù),可以建立唯一索如果要求索引中的字段值不能重復(fù),可以建立唯一索引。引。n創(chuàng)建唯一索引時,對于具有單個字段的索引,要求這創(chuàng)建唯一索引時,對于具有單個

9、字段的索引,要求這個字段中的各個值不能重復(fù)。也可以對多個字段的組個字段中的各個值不能重復(fù)。也可以對多個字段的組合創(chuàng)建索引,索引中包含多個字段的復(fù)合索引也可以合創(chuàng)建索引,索引中包含多個字段的復(fù)合索引也可以是唯一索引,多個字段的組合取值不能重復(fù)。是唯一索引,多個字段的組合取值不能重復(fù)。n注意:一個索引中最多可以包含注意:一個索引中最多可以包含16個字段的組合,并個字段的組合,并且索引中的所有字段必須屬于同一個數(shù)據(jù)表。且索引中的所有字段必須屬于同一個數(shù)據(jù)表。創(chuàng)建索引n在在SQL Server 2005中,索引可以由系統(tǒng)自動中,索引可以由系統(tǒng)自動創(chuàng)建,也可以由用戶手工創(chuàng)建。創(chuàng)建,也可以由用戶手工創(chuàng)建。

10、n系統(tǒng)在創(chuàng)建表中的其他對象時可以附帶地創(chuàng)建系統(tǒng)在創(chuàng)建表中的其他對象時可以附帶地創(chuàng)建新索引,例如新建表時,如果創(chuàng)建主鍵或者唯新索引,例如新建表時,如果創(chuàng)建主鍵或者唯一性約束,系統(tǒng)會自動創(chuàng)建相應(yīng)的索引。一性約束,系統(tǒng)會自動創(chuàng)建相應(yīng)的索引。n例例8-2-1:在:在STUDENT數(shù)據(jù)庫中創(chuàng)建一個新表數(shù)據(jù)庫中創(chuàng)建一個新表T_DEPARTMENT,并將其中的并將其中的D_NAME字字段設(shè)置為聚集的唯一索引。段設(shè)置為聚集的唯一索引。創(chuàng)建索引n如果在如果在SQL Server管理控制臺中用鼠標設(shè)置管理控制臺中用鼠標設(shè)置主鍵,系統(tǒng)會自動創(chuàng)建一個唯一的聚集索引,主鍵,系統(tǒng)會自動創(chuàng)建一個唯一的聚集索引,索 引 名

11、為索 引 名 為 “ P K _ 表 名表 名 ” 。 如 果 是 使 用。 如 果 是 使 用Transact-SQL語句添加主鍵約束,也會創(chuàng)建語句添加主鍵約束,也會創(chuàng)建一個唯一索引,但索引名稱為一個唯一索引,但索引名稱為“PK_表名表名_xxxxxxxx”,其中其中x由系統(tǒng)自動生成的。由系統(tǒng)自動生成的。創(chuàng)建索引n如果使用如果使用NONCLUSTERED關(guān)鍵字,會生成關(guān)鍵字,會生成非聚集的唯一索引;使用非聚集的唯一索引;使用CLUSTERED關(guān)鍵字,關(guān)鍵字,會生成聚集的唯一索引。不使用關(guān)鍵字時,如會生成聚集的唯一索引。不使用關(guān)鍵字時,如果此表存在聚集索引,則生成非聚集的唯一索果此表存在聚集索

12、引,則生成非聚集的唯一索引,否則生成聚集的唯一索引。引,否則生成聚集的唯一索引。n例例8-2-2:在:在STUDENT數(shù)據(jù)庫中創(chuàng)建一個新表數(shù)據(jù)庫中創(chuàng)建一個新表T_SPECIALTY,并將其中的并將其中的P_NUMBER字字段設(shè)置為主鍵。段設(shè)置為主鍵。使用SQL Server管理控制臺創(chuàng)建索引n使用使用SQL Server管理控制臺直接創(chuàng)建索引可管理控制臺直接創(chuàng)建索引可以使用兩種方法:以使用兩種方法:n方法一:在方法一:在SQL Server管理控制臺中,展開管理控制臺中,展開指定的服務(wù)器和數(shù)據(jù)庫,單擊要創(chuàng)建索引的表,指定的服務(wù)器和數(shù)據(jù)庫,單擊要創(chuàng)建索引的表,并右擊其中的并右擊其中的“索引索引”

13、文件夾,從彈出的快捷文件夾,從彈出的快捷菜單中選擇菜單中選擇“新建索引新建索引”選項。選項。n例例8-2-1:創(chuàng)建一個新的非聚集索引,要求按:創(chuàng)建一個新的非聚集索引,要求按照照T_STUDENT中的中的S_NAME字段的降序創(chuàng)建,字段的降序創(chuàng)建,索引名為索引名為“IX_S_NAME”。使用SQL Server管理控制臺創(chuàng)建索引n方法二:方法二:n進入表結(jié)構(gòu)的設(shè)計窗口,在窗口中右擊鼠標,進入表結(jié)構(gòu)的設(shè)計窗口,在窗口中右擊鼠標,從快捷菜單中選擇從快捷菜單中選擇“索引索引/鍵鍵”,會打開,會打開“索索引引/鍵鍵”對話框??梢蕴砑有滤饕騽h除已有對話框??梢蕴砑有滤饕騽h除已有的索引。的索引。使用Tr

14、ansact-SQL語句創(chuàng)建索引n利用利用Transact-SQL語句中的語句中的CREATE INDEX命令可命令可以創(chuàng)建索引:以創(chuàng)建索引:nC R E AT E U N I Q U E C L U S T E R E D | NONCLUSTERED n INDEX index_name ON table | view ( column ASC | DESC ,.n ) n其中,各參數(shù)的說明如下:其中,各參數(shù)的說明如下:nUNIQUE:用于指定為表或視圖創(chuàng)建唯一索引。用于指定為表或視圖創(chuàng)建唯一索引。nCLUSTERED:用于指定創(chuàng)建的索引為聚集索引。用于指定創(chuàng)建的索引為聚集索引。使用Tra

15、nsact-SQL語句創(chuàng)建索引nNONCLUSTERED:用于指定創(chuàng)建的索引為用于指定創(chuàng)建的索引為非聚集索引。非聚集索引。nindex_name:用于指定所創(chuàng)建的索引名稱。用于指定所創(chuàng)建的索引名稱。ntable:用于指定創(chuàng)建索引的表名稱。用于指定創(chuàng)建索引的表名稱。nview:用于指定創(chuàng)建索引的視圖名稱。用于指定創(chuàng)建索引的視圖名稱。nASC|DESC:用于指定某個具體索引列的升用于指定某個具體索引列的升序或降序排序方向。默認值為升序(序或降序排序方向。默認值為升序(ASC)。)。nColumn:用于指定被索引的列。用于指定被索引的列。使用Transact-SQL語句創(chuàng)建索引n例例8-2-3:使用

16、:使用CREATE INDEX語句為表語句為表T_STUDENT創(chuàng)建一個非聚集索引,索引字段創(chuàng)建一個非聚集索引,索引字段為為S_NAME,索引名為索引名為IX_STUDENTName。n例例8-2-4:為表:為表T_STUDENT創(chuàng)建一個復(fù)合索創(chuàng)建一個復(fù)合索引,使用的字段為引,使用的字段為SEX字段和字段和BIRTHDAY字段,字段,排序順序排序順序SEX為降序,為降序,BIRTHDAY為升序。為升序。查看、修改和刪除索引使用SQL Server管理控制臺查看、修改和刪除索引n在在SQL Server管理控制臺中,展開指定的服管理控制臺中,展開指定的服務(wù)器和數(shù)據(jù)庫,右擊某個表,從彈出的快捷菜務(wù)

17、器和數(shù)據(jù)庫,右擊某個表,從彈出的快捷菜單中選擇單中選擇“修改修改”選項,進入表結(jié)構(gòu)的設(shè)計窗選項,進入表結(jié)構(gòu)的設(shè)計窗口,在窗口中右擊鼠標,選擇口,在窗口中右擊鼠標,選擇“索引索引/鍵鍵”,即可打開管理索引對話框,在窗口的左部選中即可打開管理索引對話框,在窗口的左部選中某個索引,在窗口右部可以查看此索引的信息,某個索引,在窗口右部可以查看此索引的信息,并可修改相關(guān)信息,也可以單擊并可修改相關(guān)信息,也可以單擊“刪除刪除”按鈕,按鈕,刪除索引。刪除索引。使用系統(tǒng)存儲過程查看索引信息和更改索引名稱n1使用系統(tǒng)存儲過程查看索引信息使用系統(tǒng)存儲過程查看索引信息n系統(tǒng)存儲過程系統(tǒng)存儲過程sp_helpinde

18、x可以返回表的所可以返回表的所有索引信息,其語法形式如下;有索引信息,其語法形式如下;nsp_helpindex objname=namen其中,其中,objname=name參數(shù)用于指定當參數(shù)用于指定當前數(shù)據(jù)庫中的表的名稱。前數(shù)據(jù)庫中的表的名稱。n例例 8 - 3 - 1 : 使 用 系 統(tǒng) 存 儲 過 程 查 看: 使 用 系 統(tǒng) 存 儲 過 程 查 看T_STUDENT表的索引信息。表的索引信息。使用系統(tǒng)存儲過程查看索引信息和更改索引名稱n2使用系統(tǒng)存儲過程更改索引名稱使用系統(tǒng)存儲過程更改索引名稱n可以使用系統(tǒng)存儲過程可以使用系統(tǒng)存儲過程sp_rename更改索引更改索引的名稱,其語法形

19、式如下:的名稱,其語法形式如下:nsp_renameobjname=object_name,newname=new_namen,objtype=object_type n例例8-3-2:將:將T_STUDENT表中的索引表中的索引I X _ T _ S T U D E N T 2 的 名 稱 更 改 為的 名 稱 更 改 為IX_T_STUDENT_SexAndBirth。使用Transact-SQL語句刪除索引n可以使用可以使用DROP INDEX命令刪除一個或者多命令刪除一個或者多個當前數(shù)據(jù)庫中的索引:個當前數(shù)據(jù)庫中的索引:nDROP INDEX table.index | view.in

20、dex ,.n n其中,其中,table | view用于指定索引列所在的表用于指定索引列所在的表或索引視圖;或索引視圖;index用于指定要刪除的索引名用于指定要刪除的索引名稱。稱。使用Transact-SQL語句刪除索引n注 意 :注 意 : D R O P I N D E X 命 令 不 能 刪 除 由命 令 不 能 刪 除 由CREATE TABLE或者或者ALTER TABLE命令創(chuàng)命令創(chuàng)建的主鍵或者唯一性約束索引。建的主鍵或者唯一性約束索引。n例例8-3-3:刪除表:刪除表T_STUDENT中的索引中的索引IX_T_STUDENT_SEXAndBirth。n創(chuàng)建簡單非聚集索引n以下

21、示例為Purchasing.ProductVendor 表的VendorID 列創(chuàng)建非聚集索引nUSE AdventureWorks;nGOnIF EXISTS (SELECT name FROM sys.indexesn WHERE name = NIX_ProductVendor_VendorID)n DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor;nGOnCREATE INDEX IX_ProductVendor_VendorID n ON Purchasing.ProductVendor (VendorI

22、D); nGOnB. 創(chuàng)建簡單非聚集組合索引n以下示例為Sales.SalesPerson 表的SalesQuota 和SalesYTD 列創(chuàng)建非聚集組合索引。nUSE AdventureWorksnGOnIF EXISTS (SELECT name FROM sys.indexesn WHERE name = NIX_SalesPerson_SalesQuota_SalesYTD)n DROP INDEX IX_SalesPerson_SalesQuota_SalesYTD ON Sales.SalesPerson ;nGOnCREATE NONCLUSTERED INDEX IX_Sale

23、sPerson_SalesQuota_SalesYTDn ON Sales.SalesPerson (SalesQuota, SalesYTD);nGOnC. 創(chuàng)建唯一非聚集索引n以下示例為Production.UnitMeasure 表的Name 列創(chuàng)建唯一的非聚集索引。該索引將強制插入Name 列中的數(shù)據(jù)具有唯一性。nUSE AdventureWorks;nGOnIF EXISTS (SELECT name from sys.indexesn WHERE name = NAK_UnitMeasure_Name)n DROP INDEX AK_UnitMeasure_Name ON Prod

24、uction.UnitMeasure;nGOnCREATE UNIQUE INDEX AK_UnitMeasure_Name n ON Production.UnitMeasure(Name);nGOn以下查詢通過嘗試插入與現(xiàn)有行包含相同值的一行來測試唯一性約束。n-Verify the existing value.nSELECT Name FROM Production.UnitMeasure WHERE Name = NOunces;nGOnINSERT INTO Production.UnitMeasure (UnitMeasureCode, Name, ModifiedDate)n

25、VALUES (OC, Ounces, GetDate();n nD. 使用IGNORE_DUP_KEY 選項n以下示例首先在該選項設(shè)置為ON 時在臨時表中插入多行,然后在該選項設(shè)置為OFF 時執(zhí)行相同操作,以演示IGNORE_DUP_KEY 選項的影響。單個行被插入#Test 表,在執(zhí)行第二個多行INSERT 語句時將導(dǎo)致出現(xiàn)重復(fù)值。表中的行計數(shù)會返回插入的行數(shù)。nUSE AdventureWorks;nGOnCREATE TABLE #Test (C1 nvarchar(10), C2 nvarchar(50), C3 datetime);nGOnCREATE UNIQUE INDEX A

26、K_Index ON #Test (C2)n WITH (IGNORE_DUP_KEY = ON);nGOnINSERT INTO #Test VALUES (NOC, NOunces, GETDATE();nINSERT INTO #Test SELECT * FROM Production.UnitMeasure;nGOnSELECT COUNT(*)AS Number of rows FROM #Test;nGOnDROP TABLE #Test;nGOn n但將IGNORE_DUP_KEY 設(shè)置為OFF。nUSE AdventureWorks;nGOnCREATE TABLE #Tes

27、t (C1 nvarchar(10), C2 nvarchar(50), C3 datetime);nGOnCREATE UNIQUE INDEX AK_Index ON #Test (C2)n WITH (IGNORE_DUP_KEY = OFF);nGOnINSERT INTO #Test VALUES (NOC, NOunces, GETDATE();nINSERT INTO #Test SELECT * FROM Production.UnitMeasure;nGOnSELECT COUNT(*)AS Number of rows FROM #Test;nGOnDROP TABLE #

28、Test;nGOn nE. 使用DROP_EXISTING 刪除和重新創(chuàng)建索引n以下示例使用DROP_EXISTING 選項在Production.WorkOrder 表的ProductID 列上刪除并重新創(chuàng)建現(xiàn)有索引。還設(shè)置了FILLFACTOR 和PAD_INDEX 選項。nUSE AdventureWorks;nGOnCREATE NONCLUSTERED INDEX IX_WorkOrder_ProductIDn ON Production.WorkOrder(ProductID)n WITH (FILLFACTOR = 80,n PAD_INDEX = ON,n DROP_EXIST

29、ING = ON);nGOnG. 創(chuàng)建具有包含性(非鍵)列的索引創(chuàng)建具有包含性(非鍵)列的索引n以下示例創(chuàng)建具有一個鍵列以下示例創(chuàng)建具有一個鍵列(PostalCode) 和四個非鍵列和四個非鍵列(AddressLine1、AddressLine2、City、StateProvinceID)的非聚集)的非聚集索引。然后執(zhí)行該索引覆蓋的查詢。若要顯示查詢優(yōu)化器選擇的索引,索引。然后執(zhí)行該索引覆蓋的查詢。若要顯示查詢優(yōu)化器選擇的索引,執(zhí)行查詢前請在執(zhí)行查詢前請在SQL Server Management Studio 中的中的“查詢查詢”菜單上選菜單上選擇擇“顯示實際執(zhí)行計劃顯示實際執(zhí)行計劃”。nU

30、SE AdventureWorks;nGOnIF EXISTS (SELECT name FROM sys.indexesn WHERE name = NIX_Address_PostalCode)n DROP INDEX IX_Address_PostalCode ON Person.Address;nGOnCREATE NONCLUSTERED INDEX IX_Address_PostalCoden ON Person.Address (PostalCode)n INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);nGO

31、nSELECT AddressLine1, AddressLine2, City, StateProvinceID, PostalCodenFROM Person.AddressnWHERE PostalCode BETWEEN N98000 and N99999;nGOntext索引應(yīng)用n在公文表中 對索引進行舉例.哪些地方適合建立索引n舉例!哪些地方適合建立索引n舉例!n列名 操作符 n列名可以出現(xiàn)在操作符的一邊,而常數(shù)或變量出現(xiàn)在操作符的另一邊。如:nName=張三 n價格5000 n50005000 nname like 張% ,可建索引 n而:name like %張 ,不應(yīng)該建索引

32、nor 會引起全表掃描 Name=張三 and 價格5000 符號可以建立索引n而:Name=張三 or 價格5000 不應(yīng)建立索引,使用or會引起全表掃描。 nIN 的作用相當與OR 語句: nSelect * from table1 where tid in (2,3) 和 Select * from table1 where tid=2 or tid=3 是一樣的,都會引起全表掃描,如果tid上有索引,其索引也會失效。改善SQL語句n字段提取要按照“需多少、提多少”的原則,避免“select *” n我們來做一個試驗:nselect top 10000 gid,fariqi,reader

33、,title from tgongwen order by gid descn用時:毫秒nselect top 10000 gid,fariqi,title from tgongwen order by gid descn用時:毫秒nselect top 10000 gid,fariqi from tgongwen order by gid descn用時:毫秒改善SQL語句norder by按聚集索引列排序效率最高n我們來看:(gid是主鍵,fariqi是聚合索引列):nselect top 10000 gid,fariqi,reader,title from tgongwenn用時:毫秒。

34、掃描計數(shù)1,邏輯讀289 次,物理讀1 次,預(yù)讀1527 次。nselect top 10000 gid,fariqi,reader,title from tgongwen order by gid ascn用時:毫秒。掃描計數(shù)1,邏輯讀41956 次,物理讀0 次,預(yù)讀1287 次。nselect top 10000 gid,fariqi,reader,title from tgongwen order by gid descn用時:毫秒。掃描計數(shù)1,邏輯讀55350 次,物理讀10 次,預(yù)讀775 次。nselect top 10000 gid,fariqi,reader,title from tgongwen order by fariqi ascn用時:毫秒。掃描計數(shù)1,邏輯讀290 次,物理讀0 次,預(yù)讀0 次。nselect top 10000 gid,fariqi,reader,title from tgongwen order by fariqi descn用時:毫秒。掃描計數(shù)1,邏輯讀289 次,物理讀0 次,預(yù)讀0 次。n從以上我們可以看出,不排序的速度以及邏輯讀次數(shù)都

溫馨提示

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

最新文檔

評論

0/150

提交評論