SQL Server之索引
簡(jiǎn)單來(lái)說(shuō),索引就是一個(gè)指針,指向表里的數(shù)據(jù)。
創(chuàng)建索引
create indext index_name on table_name
刪除索引
drop index index_name on table_name
索引的類型
單字段索引
create indext index_name on table_name(column_name)
如果某個(gè)字段單獨(dú)在Where子句作為單獨(dú)的查詢條件,它的單字段索引是最有效的。
唯一索引
create unique indext index_name on table_name(column_name)
唯一索引不允許表里有重復(fù)值,且column_name不能是主鍵。
組合索引
create indext index_name on table_name(column1,column2)
組合索引是基于一個(gè)表里兩個(gè)或多個(gè)字段的索引
隱含索引
是數(shù)據(jù)庫(kù)服務(wù)程序在創(chuàng)建對(duì)象時(shí)自動(dòng)創(chuàng)建的。比如,數(shù)據(jù)庫(kù)會(huì)給主鍵約束和唯一性約束自動(dòng)創(chuàng)建索引。
為什么給這些約束自動(dòng)創(chuàng)建索引?
從一個(gè)數(shù)據(jù)庫(kù)服務(wù)程序的角度來(lái)看,當(dāng)管理員向數(shù)據(jù)庫(kù)添加一列新信息時(shí),主鍵是唯一的。為了有效地檢查新值在數(shù)以千計(jì)的
記錄里是唯一的,表里的主鍵列必須被索引。因此,在創(chuàng)建主鍵或唯一性約束時(shí),數(shù)據(jù)庫(kù)會(huì)自動(dòng)給他們創(chuàng)建索引。
聚集索引和非聚集索引
根據(jù)索引的順序與數(shù)據(jù)表的物理順序是否相同,可以把索引非為聚集索引和非聚集索引。
例如:字典的目錄就是一種索引,因?yàn)橥ㄟ^(guò)目錄我們可以很快的定位到要檢索的內(nèi)容,而不是從頭到尾把字典翻一遍。漢語(yǔ)字典
一般都提供兩種目錄,一種是拼音目錄,另一種是偏旁部首目錄。漢語(yǔ)字典是按照拼音的順序排列的,因此拼音目錄就是聚集索引,
而偏旁部首目錄是非聚集索引,
每一個(gè)表都只有一個(gè)聚集索引,因?yàn)楸碇袛?shù)據(jù)的物理順序只有一個(gè),而非聚集索引則可以創(chuàng)建多個(gè)。
索引的小知識(shí)
索引是數(shù)據(jù)庫(kù)調(diào)優(yōu)的最根本的方法,很多優(yōu)化手法都是圍繞索引展開(kāi)的,可以說(shuō)索引是一切優(yōu)化手法的“內(nèi)功”,而所有的優(yōu)化
手法都是由索引衍化出來(lái)的招式而已。
但是由于索引需要占據(jù)一定的存儲(chǔ)空間,而且索引也會(huì)降低數(shù)據(jù)插入、刪除和更新的速度,所以應(yīng)該只創(chuàng)建必要的索引,一般是
在檢索的時(shí)候用的字段中創(chuàng)建索引。
索引還會(huì)造成存儲(chǔ)碎片的問(wèn)題。當(dāng)刪除一條記錄時(shí),將會(huì)導(dǎo)致對(duì)應(yīng)的索引中的該記錄的對(duì)應(yīng)項(xiàng)為空,由于索引是采用B樹(shù)結(jié)構(gòu)存儲(chǔ),
所以對(duì)應(yīng)的索引項(xiàng)不會(huì)被刪除,經(jīng)過(guò)一段時(shí)間的增刪改操作后,數(shù)據(jù)庫(kù)中就會(huì)出現(xiàn)大量的存儲(chǔ)碎片,這些存儲(chǔ)碎片不僅占用了存儲(chǔ)
空間,而且降低了數(shù)據(jù)庫(kù)運(yùn)行的速度。那么怎么處理這些存儲(chǔ)碎片呢?最方便的手段就是重建索引,重建索引會(huì)將先前創(chuàng)建的索引
刪除然后重新創(chuàng)建索引,主流數(shù)據(jù)庫(kù)管理系統(tǒng)都提供了重建索引的功能,比如reindex,rebuild等,如果沒(méi)有提供重建索引功能,可以
首先用drop index語(yǔ)句刪除索引,然后用alter table語(yǔ)句重新創(chuàng)建索引。
轉(zhuǎn)載于:https://www.cnblogs.com/jiajiayuan/archive/2011/07/12/2104418.html
總結(jié)
以上是生活随笔為你收集整理的SQL Server之索引的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 孕妇梦到滑坡是什么意思
- 下一篇: [MSSQL]COALESCE与ISNU