1、索引定義
數(shù)據(jù)庫索引好比是一本書前面的目錄,能加快數(shù)據(jù)庫的查詢速度。索引是對數(shù)據(jù)庫表中一個或多個列(例如,employee表的姓氏(lname)列)的值進行排序的結(jié)構(gòu)。如果想按特定職員的姓來查找他或她,則與在表中搜索所有的行相比,索引有助于更快地獲取信息。
2、建立索引的優(yōu)缺點:
優(yōu)點:1.大大加快數(shù)據(jù)的檢索速度;
2.創(chuàng)建唯一性索引,保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性;
3.加速表和表之間的連接;
4.在使用分組和排序子句進行數(shù)據(jù)檢索時,可以顯著減少查詢中分組和排序的時間。
缺點:
1.索引需要占用數(shù)據(jù)表以外的物理存儲空間
2.創(chuàng)建索引和維護索引要花費一定的時間
3.當(dāng)對表進行更新操作時,索引需要被重建,這樣降低了數(shù)據(jù)的維護速度。
索引類型:
根據(jù)數(shù)據(jù)庫的功能,可以在數(shù)據(jù)庫設(shè)計器中創(chuàng)建索引:唯一索引、主鍵索引和聚集索引。 盡管唯一索引有助于定位信息,但為獲得最佳性能結(jié)果,建議改用主鍵或唯一約束。
4、索引的實現(xiàn)方式
1B+樹
我們經(jīng)常聽到B+樹就是這個概念,用這個樹的目的和紅黑樹差不多,也是為了盡量保持樹的平衡,當(dāng)然紅黑樹是二叉樹,但B+樹就不是二叉樹了,節(jié)點下面可以有多個子節(jié)點,數(shù)據(jù)庫開發(fā)商會設(shè)置子節(jié)點數(shù)的一個最大值,這個值不會太小,所以B+樹一般來說比較矮胖,而紅黑樹就比較瘦高了。
關(guān)于B+樹的插入,刪除,會涉及到一些算法以保持樹的平衡,這里就不詳述了。ORACLE的默認索引就是這種結(jié)構(gòu)的。
如果經(jīng)常需要同時對兩個字段進行AND查詢,那么使用兩個單獨索引不如建立一個復(fù)合索引,因為兩個單獨索引通常數(shù)據(jù)庫只能使用其中一個,而使用復(fù)合索引因為索引本身就對應(yīng)到兩個字段上的,效率會有很大提高。
2散列索引
第二種索引叫做散列索引,就是通過散列函數(shù)來定位的一種索引,不過很少有單獨使用散列索引的,反而是散列文件組織用的比較多。
散列文件組織就是根據(jù)一個鍵通過散列計算把對應(yīng)的記錄都放到同一個槽中,這樣的話相同的鍵值對應(yīng)的記錄就一定是放在同一個文件里了,也就減少了文件讀取的次數(shù),提高了效率。
散列索引呢就是根據(jù)對應(yīng)鍵的散列碼來找到最終的索引項的技術(shù),其實和B樹就差不多了,也就是一種索引之上的二級輔助索引,我理解散列索引都是二級或更高級的稀疏索引,否則桶就太多了,效率也不會很高。
3位圖索引
位圖索引是一種針對多個字段的簡單查詢設(shè)計一種特殊的索引,適用范圍比較小,只適用于字段值固定并且值的種類很少的情況,比如性別,只能有男和女,或者級別,狀態(tài)等等,并且只有在同時對多個這樣的字段查詢時才能體現(xiàn)出位圖的優(yōu)勢。
位圖的基本思想就是對每一個條件都用0或者1來表示,如有5條記錄,性別分別是男,女,男,男,女,那么如果使用位圖索引就會建立兩個位圖,對應(yīng)男的10110和對應(yīng)女的01001,這樣做有什么好處呢,就是如果同時對多個這種類型的字段進行and或or查詢時,可以使用按位與和按位或來直接得到結(jié)果了。
B+樹最常用,性能也不差,用于范圍查詢和單值查詢都可以。特別是范圍查詢,非得用B+樹這種順序的才可以了。
HASH的如果只是對單值查詢的話速度會比B+樹快一點,但是ORACLE好像不支持HASH索引,只支持HASH表空間。
位圖的使用情況很局限,只有很少的情況才能用,一定要確定真正適合使用這種索引才用(值的類型很少并且需要復(fù)合查詢),否則建立一大堆位圖就一點意義都沒有了。
唯一索引:UNIQUE例如:create unique index stusno on student(sno);
表明此索引的每一個索引值只對應(yīng)唯一的數(shù)據(jù)記錄,對于單列惟一性索引,這保證單列不包含重復(fù)的值。對于多列惟一性索引,保證多個值的組合不重復(fù)。
主鍵索引:primary key
數(shù)據(jù)庫表經(jīng)常有一列或列組合,其值唯一標識表中的每一行。該列稱為表的主鍵。在數(shù)據(jù)庫關(guān)系圖中為表定義主鍵將自動創(chuàng)建主鍵索引,主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一。當(dāng)在查詢中使用主鍵索引時,它還允許對數(shù)據(jù)的快速訪問。聚集索引(也叫聚簇索引):cluster
在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個表只能包含一個聚集索引。如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的數(shù)據(jù)訪問速度。