索引

一、彙集索引:又稱爲主索引,即表記錄的排列順序與索引的排列順序一致。數據庫

優勢是:查詢速度快,由於一旦第一個索引值的記錄被找到,具備連續索引值的記錄物理上也必定是連續的,順序查找便可找到。數據結構

缺點是:對錶進行修改速度慢,這是由於爲了保持表中的記錄的物理順序與索引的順序一致,而把記錄插入到數據頁的相應位置,必須在數據頁中進行數據重排。所以速度比較慢。性能

建議使用匯集索引的場合爲:
a.此列包含有限數目的不一樣值;
b.查詢的結果返回一個區間的值;
c.查詢的結果返回某值相同的大量結果集。
 指針

二、非彙集索引(輔助索引):它指定了表中的邏輯順序,但記錄的物理順序與索引的順序不一致。排序

優勢:提升了查詢性能;缺點:顯著增長了數據庫的更新開銷。索引

建議使用非彙集索引的場合爲:
a.此列包含了大量數目不一樣的值;
b.查詢的結束返回的是少許的結果集;
c.order by 子句中使用了該列。
 it

三、彙集索引和非彙集索引的區別與聯繫原理

       彙集索引和非彙集索引都採用了B+樹的結構,但非彙集索引的葉子層並不與實際的數據頁相重疊,而採用葉子層包含一個指向表中的記錄在數據頁中的指針的方式。非彙集索引比彙集索引層次多,添加記錄不會引發數據順序的重組。date

       表中常常有一個列或列的組合,其值能惟一地標識表中的每一行。這樣的一列或多列稱爲表的主鍵.(默認爲彙集索引)。彙集索引肯定表中數據的物理順序。彙集索引相似於電話簿,後者按姓氏排列數據。因爲彙集索引規定數據在表中的物理存儲順序,所以一個表只能包含一個彙集索引。但該索引能夠包含多個列(組合索引),就像電話簿按姓氏和名字進行組織同樣。二叉樹

       非彙集索引與課本中的索引相似。數據存儲在一個地方,索引存儲在另外一個地方,索引帶有指針指向數據的存儲位置。索引中的項目按索引鍵值的順序存儲,而表中的信息按另外一種順序存儲(這能夠由彙集索引規定)。

      《數據庫原理》裏面的解釋:彙集索引的順序就是數據的物理存儲順序,而非彙集索引的順序和數據物理排列無關。由於數據在物理存放時只能有一種排列方式,因此一個表只能有一個彙集索引。

       在SQL SERVER中,索引是經過二叉樹的數據結構來描述的;咱們能夠如此理解這個兩種索引:彙集索引的葉節點就是數據節點,而非彙集索引的葉節點仍然是索引節點,只不過其包含一個指向對應數據塊的指針。彙集索引會下降   insert,delete和update操做的性能,因此,是否使用匯集索引要全面衡量。 

三、數據庫索引是創建在數據庫表中的某些列上,適合建立索引的狀況以下:

(1)、在常常須要搜索的列上,能夠加快搜索的速度;

(2)、在做爲主鍵的列上,強制該列的惟一性和組織表中數據的排列結構;

(3)、在常常用在鏈接的列上,這些列主要是一些外鍵,能夠加快鏈接的速度;

(4)、在常常須要根據範圍進行搜索的列上建立索引,由於索引已經排序,其指定的範圍是連續的;

(5)、在常常須要排序的列上建立索引,由於索引已經排序,這樣查詢能夠利用索引的排序,加快排序查詢時間;

(6)、在常用在WHERE子句中的列上面建立索引,加快條件的判斷速度。

不適合建立索引的列具備以下的特色:

第一,對於那些在查詢中不多使用或者參考的列不該該建立索引。這是由於,既然這些列不多使用到,所以有索引或者無索引,並不能提升查詢速度。相反,因爲增長了索引,反而下降了系統的維護速度和增大了空間需求。

第二,對於那些只有不多數據值的列也不該該增長索引。這是由於,因爲這些列的取值不多,例如人事表的性別列,在查詢的結果中,結果集的數據行佔了表中數據行的很大比例,即須要在表中搜索的數據行的比例很大。增長索引,並不能明顯加快檢索速度。

第三,對於那些定義爲text, image和bit數據類型的列不該該增長索引。這是由於,這些列的數據量要麼至關大,要麼取值不多。

第四,當一個或多個列上的修改操做遠遠多於於檢索操做時,不該該建立索引。這是由於,修改性能和檢索性能是互相矛盾的。當增長索引時,會提升檢索性能,可是會下降修改性能。當減小索引時,會提升修改性能,下降檢索性能。所以,當修改性能遠遠大於檢索性能時,不該該建立索引。

相關文章
相關標籤/搜索