SQL Server和Oracle中索引介紹
來(lái)源:程序員人生 發(fā)布時(shí)間:2014-01-17 15:45:44 閱讀次數(shù):3739次
1 SQL Server中的索引
索引是與表或視圖關(guān)聯(lián)的磁盤(pán)上結(jié)構(gòu),可以加快從表或視圖中檢索行的速度。索引包含由表或視圖中的一列或多列生成的鍵。這些鍵存儲(chǔ)在一個(gè)結(jié)構(gòu)(B 樹(shù))中,使 SQL Server 可以快速有效地查找與鍵值關(guān)聯(lián)的行。
表或視圖可以包含以下類(lèi)型的索引:
聚集索引
聚集索引根據(jù)數(shù)據(jù)行的鍵值在表或視圖中排序和存儲(chǔ)這些數(shù)據(jù)行。索引定義中包含聚集索引列。每個(gè)表只能有一個(gè)聚集索引,因?yàn)閿?shù)據(jù)行本身只能按一個(gè)順序排序。
只有當(dāng)表包含聚集索引時(shí),表中的數(shù)據(jù)行才按排序順序存儲(chǔ)。如果表具有聚集索引,則該表稱(chēng)為聚集表。如果表沒(méi)有聚集索引,則其數(shù)據(jù)行存儲(chǔ)在一個(gè)稱(chēng)為堆的無(wú)序結(jié)構(gòu)中。
每個(gè)表幾乎都對(duì)列定義聚集索引來(lái)實(shí)現(xiàn)下列功能:
1、可用于經(jīng)常使用的查詢(xún)。
2、提供高度唯一性。
在創(chuàng)建聚集索引之前,應(yīng)先了解數(shù)據(jù)是如何被訪問(wèn)的。考慮對(duì)具有以下特點(diǎn)的查詢(xún)使用聚集索引:
使用運(yùn)算符(如 BETWEEN、>、>=、< 和 <=)返回一系列值。
使用聚集索引找到包含第一個(gè)值的行后,便可以確保包含后續(xù)索引值的行物理相鄰。例如,如果某個(gè)查詢(xún)?cè)谝幌盗胁少?gòu)訂單號(hào)間檢索記錄,PurchaseOrderNumber 列的聚集索引可快速定位包含起始采購(gòu)訂單號(hào)的行,然后檢索表中所有連續(xù)的行,直到檢索到最后的采購(gòu)訂單號(hào)。
返回大型結(jié)果集。
使用 JOIN 子句;一般情況下,使用該子句的是外鍵列。
使用 ORDER BY 或 GROUP BY 子句。
在 ORDER BY 或 GROUP BY 子句中指定的列的索引,可以使數(shù)據(jù)庫(kù)引擎 不必對(duì)數(shù)據(jù)進(jìn)行排序,因?yàn)檫@些行已經(jīng)排序。這樣可以提高查詢(xún)性能。
聚集索引不適用于具有下列屬性的列:
頻繁更改的列
這將導(dǎo)致整行移動(dòng),因?yàn)閿?shù)據(jù)庫(kù)引擎 必須按物理順序保留行中的數(shù)據(jù)值。這一點(diǎn)要特別注意,因?yàn)樵诖笕萘渴聞?wù)處理系統(tǒng)中數(shù)據(jù)通常是可變的。
寬鍵
寬鍵是若干列或若干大型列的組合。所有非聚集索引將聚集索引中的鍵值用作查找鍵。為同一表定義的任何非聚集索引都將增大許多,這是因?yàn)榉蔷奂饕?xiàng)包含聚集鍵,同時(shí)也包含為此非聚集索引定義的鍵列。
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)