第六章SQLServer 2012 索引
數(shù)據(jù)庫的索引類似于書籍的索引。在書籍中,索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息。在數(shù)據(jù)庫中,索引也允許數(shù)據(jù)庫程序迅速地找到表中的數(shù)據(jù),而不必掃描整個數(shù)據(jù)庫。
一、索引的優(yōu)點(diǎn)
1.創(chuàng)建唯一性索引,保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性
2.大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因
3.加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。
4.在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時,同樣可以顯著減少查詢中分組和排序的時間。
二、索引的缺點(diǎn)
1.創(chuàng)建索引和維護(hù)索引要耗費(fèi)時間,這種時間隨著數(shù)據(jù)量的增加而增加
2.索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間。
3.當(dāng)對表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時候,索引也要動態(tài)的維護(hù),降低了數(shù)據(jù)的維護(hù)速度。
三、索引的分類
1、聚集索引
聚集索引是指數(shù)據(jù)行在表中的物理存儲順序。當(dāng)為一個表的某列創(chuàng)建聚集索引時,表中的數(shù)據(jù)會按該列進(jìn)行重新排序,然后再存儲到磁盤上。因此,每個表只能創(chuàng)建一個聚集索引。
2、非聚集索引
非聚集索引與課本中的索引類似。數(shù)據(jù)存儲在一個地方,索引存儲在另一個地方,索引帶有指針指向數(shù)據(jù)的存儲位置。
四、索引的操作
(1)、使用對象資源管器創(chuàng)建索引
在“對象資源管理器“窗口中,選擇要建立索引的表,然后展開表結(jié)點(diǎn),右擊“索引”結(jié)點(diǎn),在彈出的菜單中選擇“新建索引”。
(2)、使用CREATEINDEX 語句在查詢分析器中創(chuàng)建索引
CREATE[UNIQUE][CLUSTERED][NONCLUSTERED] INDEX 索引名
ON表名(列名)
[UNIQUE] ? ? [CLUSTERED] ? ? ?[NONCLUSTERED]
唯一索引 ? ? ? ? ? ?聚集索引 ? ? ? ? ? ? ? 非聚集索引
SQLServer 2005 索引
五、查看索引信息
在對表創(chuàng)建了索引后,可以根據(jù)實(shí)際情況,查看表中索引信息。在“對象資源管理器”窗口中,或系統(tǒng)存儲過程sp_helpindex 都可以查看到索引信息。
1、使用對象資源管器查看索引信息
右擊表中已建的索引,選擇屬性,打開“索引屬性”。
2、使用系統(tǒng)存儲過程查看索引信息
sp_helpindextable_name 查看索引信息
六、刪除索引
使用索引雖然可以提高查詢效率,但是對一個表來說,如果索引過多,不但耗費(fèi)磁盤空間,而且在修改表中記錄時會增加服務(wù)器維護(hù)索引的時間。當(dāng)不再需要某個索引的時候,應(yīng)該把它從數(shù)據(jù)庫中刪除,這樣,既可以提高服務(wù)器效,又可以回收被索引占用的存儲空間。
1、使用對象資源管理器刪除索引
展開“表”結(jié)點(diǎn),再展開“索引”結(jié)點(diǎn),右擊要刪除的索引。
2、便用SQL語句刪除索引
DROPINDEX 表名.索引名
七、談?wù)勎ㄒ患s束和唯一索引
最近在看數(shù)據(jù)庫相關(guān)知識,感覺唯一約束和唯一索引好像有點(diǎn)類似,于是研究了一番,于是就有了這篇文章。
約束?全稱完整性約束,它是關(guān)系數(shù)據(jù)庫中的對象,用來存放插入到一個表中一列數(shù)據(jù)的規(guī)則,用來確保數(shù)據(jù)的準(zhǔn)確性和一致性。
索引?數(shù)據(jù)庫中用的最頻繁的操作是數(shù)據(jù)查詢,索引就是為了加速表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散的數(shù)據(jù)結(jié)構(gòu)??梢园阉饕惐瘸蓵哪夸?,有目錄的肯定比沒有目錄的書,更方便查找。
唯一約束?保證在一個字段或者一組字段里的數(shù)據(jù)都與表中其它行的對應(yīng)數(shù)據(jù)不同。和主鍵約束不同,唯一約束允許為NULL,只是只能有一行。
唯一索引?不允許具有索引值相同的行,從而禁止重復(fù)的索引或鍵值。
唯一約束和唯一索引都是為了保證表中被限制的字段不允許有重復(fù)的值,看起來功能是一樣的,那為什么要設(shè)計(jì)這樣兩種一樣的功能呢?
探究
唯一鍵鍵約束只是作為一種獨(dú)特的約束(如主鍵約束,唯一鍵約束,check約束,外鍵約束的一種),以約束的形式管理.但是同時又自動創(chuàng)建了唯一非聚集索引,也就有了索引的性能和部分功能.實(shí)際上唯一鍵約束是用唯一索引來約束的。
唯一索引就是一種索引,它對某字段進(jìn)行唯一性檢查,同時可以設(shè)置各種參數(shù),非常靈活。
那么我們在創(chuàng)建列的唯一性時,到底使用哪一種較好呢?(個人理解)
唯一鍵約束在表中是必定存在的約束的,唯一鍵約束的索引存在于一個分區(qū)中,并且不會像索引那樣可以更改。因?yàn)樗饕梢噪S時改動(當(dāng)然也不會經(jīng)常改動),索引個人建議還是用唯一索引更靈活。管理約束還得管理索引,而管理索引,一個就好了。但是對于一些高可用性,也要注意索引是否在其他地方也存在。
