程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql容易索引.

mysql容易索引.

編輯:關於MYSQL數據庫

MySQL的索引是在存儲引擎告終的,而不是在服務器層,因而不是規范的。

b-tree:

大局部的mysql扶持b-tree索引,archive懂得MySQL5.1才扶持,而且僅僅是扶持個體auto_increment列;ndb盡管把索引符號我俄哦btree,但內部利用的是t-tree。myisam利用收縮前綴一減小索引,按照行存儲的物理位置引用被索引的行;而innodb不會收縮,因為他不能把收縮用與某些優化,也是按照主鍵值引用行。

b-tree等閒意味著數據存儲是有序的,並且每個葉子到根的距離是一樣的,每個葉子都有子節點的上限和下限,並且含有被指向數據的指針,而未曾指向其他版面的指針(有指向下一個版面的連接),每個葉子對應一個key值,這個key值在葉子的上一級版面裡保留。根與葉子偶爾許包括許多層節點版面,這個深度取決於表的大小。

因為b-tree是按次序保留的索引,因而對范圍性搜查很有用,萬一索引有多個列,索引保留的次序=創立表時候的數據。

b-tree索引對於一下種類有用:相稱全名,相稱最左前綴(例如僅僅利用索引中第一列),相稱列前綴,相稱范圍值,准確相稱一局部並且相稱某個范圍中的另一局部(如,同時利用索引中的多個列)。

b-tree的局限性:萬一查找未曾從索引列的最左側開始他就沒什麼用處,不能跳過索引中的列,不能優化拜會任何一個第一個范圍條件在右邊的列xingwww.panhoo.Net.zhendexing.com。

目前乎識到了列次序的重要性了吧,對於高功能的利用過程,可能要針對雷同列一不同次序創立多個索引,一中意要求。

哈希索引:

哈希索引發生在哈西表的基礎上,對於沒一行,存儲引擎計算出了被索引列的哈希碼,把數據行的哈西碼保留在索引裡,並且保留了一個指向數據行的指針,只有memory(扶持b-tree)引擎扶持揭示的不但一的哈希索引(ndb扶持單一的哈希索引),萬一有多個雷同的哈希碼,索引就會把行以鏈表的形式保留在哈西表的統一條登記中。哈希值的長度不依靠於索引列的值,索引極其緊湊的保留簡短的哈西值。

哈希索引的局限性,MySQL不能利用索引中的值來避免讀取行,不過拜會內存很快,等閒不會波及功能;不能利用哈西索引排序;不扶持分鍵相稱;只扶持利用了= in(),和《=》的想等比擬,不利用范圍查詢;拜會哈西表的數據很快,除非冒犯率很高(雷同的哈希碼),發生冒犯的時候,讀取每個指針,逐個比擬,以確定准確值;萬一有許多冒犯有些維護會很慢。這些局限使哈西索引在某些情形下利用,然而當相稱要求的時候,就能極大的改進功能(如數據貨場)

innodb有個尤其的功能:自習慣哈希索引(adaptive hash index),當某些索引被很頻繁的拜會後,就會在b-tree頂端發生指向內存的索引,使得b-tree有了一些哈希索引的個性,但過程是全積極的,不能扼制。

全文索引:

fulltext是myisam表的一種特異索引,它從文本中找到關鍵字,而不是直接和索引中的值舉行比擬

別樣視角的存在也解釋了為什麼作者必需編輯,而行發動必需教練的起因。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved