MySQL索引結構類型

索引的類別包括-

主鍵索引( PRIMARY ):數(shù)據(jù)列不允許重復氓鄙,不允許為NULL.一個表只能有一個主鍵。

唯一索引( UNIQUE ):數(shù)據(jù)列不允許重復,允許為NULL值邀跃,一個表允許多個列創(chuàng)建唯一索引坛猪。

普通索引( INDEX ):基本的索引類型,沒有唯一性的限制污秆,允許為NULL值劈猪。

全文索引(FULLTEXT 索引在 MySQL 5.6 版本之后支持 InnoDB,而之前的版本只支持 MyISAM 表良拼。)

索引的數(shù)據(jù)結構包括-

B-Tree索引

MyISAM和InnoDB都支持這種索引战得,因此說它是應用最廣泛,最常用的一種索引方式庸推,但是不同的存儲引擎在具體實現(xiàn)時會稍有不同常侦,比如MyISAM會使用前綴壓縮的方式對索引進行壓縮,InnoDB則不會贬媒。

B-Tree只是底層的算法實現(xiàn)聋亡,唯一索引,主鍵索引际乘,普通索引都是基于B-Tree索引算法的坡倔,只不過又有各自的特點。

這篇文章對于B-Tree有著比較好視圖理解-https://segmentfault.com/a/1190000010264071

B-Tree的缺點

即索引失效的原因-http://www.reibang.com/p/d5b2f645d657

InnoDB索引MyISAM索引的區(qū)別:

一是主索引的區(qū)別脖含,InnoDB的數(shù)據(jù)文件本身就是索引文件罪塔。而MyISAM的索引和數(shù)據(jù)是分開的。

InnoDB的索引實現(xiàn)后养葵,就很容易明白為什么不建議使用過長的字段作為主鍵征堪,因為所有輔助索引都引用主索引,過長的主索引會令輔助索引變得過大关拒。再例如佃蚜,用非單調的字段作為主鍵在InnoDB中不是個好主意,因為InnoDB數(shù)據(jù)文件本身是一顆B+Tree夏醉,非單調的主鍵會造成在插入新記錄時數(shù)據(jù)文件為了維持B+Tree的特性而頻繁的分裂調整爽锥,十分低效,而使用自增字段作為主鍵則是一個很好的選擇畔柔。

二是輔助索引的區(qū)別:InnoDB的輔助索引data域存儲相應記錄主鍵的值而不是地址氯夷。而MyISAM的輔助索引和主索引沒有多大區(qū)別。

這篇文章詳細講授了B-Tree的實現(xiàn)原理和在各個引擎的工作情況-http://blog.csdn.net/bigtree_3721/article/details/73650601

這篇文章很好的對B-Tree和B+Tree做了分布的解釋說明-https://mp.weixin.qq.com/s/U_GcVrvZQWPlK4X6Afy4-Q

在和我朋友打電話過程中有不少朋友認為所謂B-Tree就是二叉樹或者紅黑樹

二分查找要求被檢索數(shù)據(jù)有序,而二叉樹查找只能應用于二叉查找樹上框沟,但是數(shù)據(jù)本身的組織結構不可能完全滿足各種數(shù)據(jù)結構(例如,理論上不可能同時將兩列都按順序進行組織)喂柒,所以踩蔚,在數(shù)據(jù)之外棚放,數(shù)據(jù)庫系統(tǒng)還維護著滿足特定查找算法的數(shù)據(jù)結構,這些數(shù)據(jù)結構以某種方式引用(指向)數(shù)據(jù)馅闽,這樣就可以在這些數(shù)據(jù)結構上實現(xiàn)高級查找算法飘蚯。這種數(shù)據(jù)結構,就是索引福也。

哈希索引

哈希索引的實現(xiàn)就比較簡單了局骤,它是基于哈希表來實現(xiàn)的,對于要索引的列暴凑,存儲引擎會計算出一一對應的哈希碼峦甩,然后把哈希碼存放在哈希表中作為key,value值是指向該行數(shù)據(jù)的指針现喳。

優(yōu)勢:

只需比對哈希值凯傲,因此速度非常快嗦篱,性能優(yōu)勢明顯冰单;

限制:

不支持任何范圍查詢,比如where price > 150默色,因為是基于哈希計算球凰,支持等值比較。

哈希表是無序存儲的腿宰,因此索引數(shù)據(jù)無法用于排序呕诉。

主流存儲引擎不支持該類型,比如MyISAM和InnoDB吃度。哈希索引只有Memory, NDB兩種引擎支持甩挫。值得一提的是,memory引擎是支持非唯一哈希索引的椿每。在數(shù)據(jù)庫世界里是比較與眾不同伊者,如果多個列的哈希值相同,索引會以鏈表的方式存放多個記錄指針到同一個哈希條目中间护。

如果哈希沖突很多的話亦渗,一些索引維護操作的代價也很高,如:如果在某個選擇性很低的列上建立哈希索引(即很多重復值的列)汁尺,那么當從表中刪除一行時法精,存儲引擎需要遍歷對應哈希值的鏈表中的每一行,找到并刪除對應的引用,沖突越多搂蜓,代價越大狼荞。

哈希索引是一種非常快的等值查找方法(注意:必須是等值帮碰,哈希索引對非等值查找方法無能為力)相味,它查找的時間復雜度為常量,InnoDB采用自適用哈希索引技術殉挽,它會實時監(jiān)控表上索引的使用情況丰涉,如果認為建立哈希索引可以提高查詢效率,則自動在內存中的“自適應哈希索引緩沖區(qū)”(詳見《MySQL - 淺談InnoDB體系架構》中內存構造)建立哈希索引此再。

innodb引擎有一個特殊的功能叫做自適應哈希索引昔搂,當innodb注意到某些索引值被使用的非常頻繁時,它會在內存中基于btree索引之上再創(chuàng)建一個哈希索引输拇,這樣就讓btree索引也具有哈希索引的一些優(yōu)點,比如:快速的哈希查找贤斜,這是一個全自動的策吠,內部的行為,用戶無法控制或者配置瘩绒,不過如果有必要猴抹,可以選擇關閉這個功能(innodb_adaptive_hash_index=OFF,默認為ON)锁荔。

空間數(shù)據(jù)索引(R-Tree)

空間索引可用于地理數(shù)據(jù)存儲蟀给,它需要GIS相關函數(shù)的支持,由于MySQL的GIS支持并不完善阳堕,所以該索引方式在MySQL中很少有人使用跋理。

全文索引

類似lucene分詞的分詞實現(xiàn)方式,如果使用中文的話有一個Mysql的中文分詞插件Mysqlcft.

順便記錄一下幾個引擎

InnoDB 支持事務,支持行級別鎖定恬总,支持 B-tree前普、Full-text 等索引,不支持 Hash 索引壹堰;

MyISAM 不支持事務拭卿,支持表級別鎖定,支持 B-tree贱纠、Full-text 等索引峻厚,不支持 Hash 索引;

Memory 不支持事務谆焊,支持表級別鎖定惠桃,支持 B-tree、Hash 等索引,不支持 Full-text 索引刽射;

NDB 支持事務军拟,支持行級別鎖定,支持 Hash 索引誓禁,不支持 B-tree懈息、Full-text 等索引;

Archive 不支持事務摹恰,支持表級別鎖定辫继,不支持 B-tree、Hash俗慈、Full-text 等索引姑宽;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市闺阱,隨后出現(xiàn)的幾起案子炮车,更是在濱河造成了極大的恐慌,老刑警劉巖酣溃,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘦穆,死亡現(xiàn)場離奇詭異,居然都是意外死亡赊豌,警方通過查閱死者的電腦和手機扛或,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碘饼,“玉大人熙兔,你說我怎么就攤上這事“眨” “怎么了住涉?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蒂萎。 經(jīng)常有香客問我秆吵,道長,這世上最難降的妖魔是什么五慈? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任纳寂,我火速辦了婚禮,結果婚禮上泻拦,老公的妹妹穿的比我還像新娘毙芜。我一直安慰自己,他們只是感情好争拐,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布腋粥。 她就那樣靜靜地躺著晦雨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隘冲。 梳的紋絲不亂的頭發(fā)上闹瞧,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音展辞,去河邊找鬼奥邮。 笑死,一個胖子當著我的面吹牛罗珍,可吹牛的內容都是我干的洽腺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼覆旱,長吁一口氣:“原來是場噩夢啊……” “哼蘸朋!你這毒婦竟也來了?” 一聲冷哼從身側響起扣唱,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤藕坯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后画舌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堕担,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年曲聂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佑惠。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡朋腋,死狀恐怖,靈堂內的尸體忽然破棺而出膜楷,到底是詐尸還是另有隱情旭咽,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布赌厅,位于F島的核電站穷绵,受9級特大地震影響,放射性物質發(fā)生泄漏特愿。R本人自食惡果不足惜仲墨,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望揍障。 院中可真熱鬧目养,春花似錦、人聲如沸毒嫡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至努释,卻和暖如春碘梢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伐蒂。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工煞躬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饿自。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓汰翠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親昭雌。 傳聞我的和親對象是個殘疾皇子复唤,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容