索引的實(shí)現(xiàn)方式
數(shù)據(jù)庫(kù)索引凤巨,是數(shù)據(jù)庫(kù)管理系統(tǒng)中一個(gè)排序的數(shù)據(jù)結(jié)構(gòu),以協(xié)助快速查詢、更新數(shù)據(jù)庫(kù)表中數(shù)據(jù)客给。索引的實(shí)現(xiàn)通常使用B樹及其變種B+樹。
B-Tree中一次檢索最多需要h-1次I/O(根節(jié)點(diǎn)常駐內(nèi)存),漸進(jìn)復(fù)雜度為O(h)=O(logdN)握巢。一般實(shí)際應(yīng)用中,出度d是非常大的數(shù)字松却,通常超過(guò)100暴浦,因此h非常薪啊(通常不超過(guò)3)。
而紅黑樹這種結(jié)構(gòu)歌焦,h明顯要深的多飞几。由于邏輯上很近的節(jié)點(diǎn)(父子)物理上可能很遠(yuǎn),無(wú)法利用局部性独撇,所以紅黑樹的I/O漸進(jìn)復(fù)雜度也為O(h)屑墨,效率明顯比B-Tree差很多。
索引種類
根據(jù)數(shù)據(jù)庫(kù)的功能券勺,可以在數(shù)據(jù)庫(kù)設(shè)計(jì)器中創(chuàng)建四種索引:
唯一索引绪钥、非唯一索引、主鍵索引和聚集索引关炼。 盡管唯一索引有助于定位信息程腹,但為獲得最佳性能結(jié)果,建議改用主鍵或唯一約束儒拂。
注意:在數(shù)據(jù)庫(kù)關(guān)系圖中為表定義主鍵將自動(dòng)創(chuàng)建主鍵索引寸潦,主鍵索引是唯一索引的特定類型。當(dāng)在查詢中使用主鍵索引時(shí)社痛,它還允許對(duì)數(shù)據(jù)的快速訪問(wèn)见转。
索引建立依據(jù)
建立索引常用的規(guī)則如下:
- 表的主鍵、外鍵必須有索引蒜哀;
- 數(shù)據(jù)量超過(guò)300的表應(yīng)該有索引斩箫;
- 經(jīng)常與其他表進(jìn)行連接的表,在連接字段上應(yīng)該建立索引撵儿;
- 經(jīng)常出現(xiàn)在Where子句中的字段乘客,特別是大表的字段,應(yīng)該建立索引淀歇;
- 索引應(yīng)該建在選擇性高的字段上易核;
- 索引應(yīng)該建在小字段上,對(duì)于大的文本字段甚至超長(zhǎng)字段浪默,不要建索引牡直;
- 復(fù)合索引的建立需要進(jìn)行仔細(xì)分析;盡量考慮用單字段索引代替:
正確選擇復(fù)合索引中的主列字段纳决,一般是選擇性較好的字段碰逸;
復(fù)合索引的幾個(gè)字段是否經(jīng)常同時(shí)以AND方式出現(xiàn)在Where子句中?單字段查詢是否極少甚至沒(méi)有阔加?如果是花竞,則可以建立復(fù)合索引;否則考慮單字段索引;
如果復(fù)合索引中包含的字段經(jīng)常單獨(dú)出現(xiàn)在Where子句中约急,則分解為多個(gè)單字段索引零远;
如果復(fù)合索引所包含的字段超過(guò)3個(gè),那么仔細(xì)考慮其必要性厌蔽,考慮減少?gòu)?fù)合的字段牵辣;
如果既有單字段索引,又有這幾個(gè)字段上的復(fù)合索引奴饮,一般可以刪除復(fù)合索引纬向;
- 頻繁進(jìn)行數(shù)據(jù)操作的表,不要建立太多的索引戴卜;
- 刪除無(wú)用的索引逾条,避免對(duì)執(zhí)行計(jì)劃造成負(fù)面影響;