MySQL索引

為什么加索引--- 提升查詢的速度

傳統(tǒng)的查詢方法须尚,是按照表的順序遍歷的动分,不論查詢幾條數(shù)據(jù)振愿,mysql需要將表的數(shù)據(jù)從頭到尾遍歷一遍捷犹。

在我們添加完索引之后,mysql一般通過BTREE算法生成一個索引文件冕末,在查詢數(shù)據(jù)庫時萍歉,找到索引文件進行遍歷(折半查找大幅查詢效率),找到相應(yīng)的鍵從而獲取數(shù)據(jù)档桃。

MySQL目前主要有以下幾種索引類型:?

普通索引枪孩、唯一索引 、主鍵索引 藻肄、組合索引 蔑舞、全文索引


普通索引

是最基本的索引,它沒有任何限制嘹屯。

唯一索引

與前面的普通索引類似攻询,不同的就是:索引列的值必須唯一,但允許有空值州弟。如果是組合索引钧栖,則列值的組合必須唯一低零。

主鍵索引

是一種特殊的唯一索引,一個表只能有一個主鍵拯杠,不允許有空值毁兆。

組合索引

指多個字段上創(chuàng)建的索引,只有在查詢條件中使用了創(chuàng)建索引時的第一個字段阴挣,索引才會被使用气堕。使用組合索引時遵循最左前綴集合。

全文索引

主要用來查找文本中的關(guān)鍵字畔咧,而不是直接與索引中的值相比較茎芭。fulltext索引跟其它索引大不相同,它更像是一個搜索引擎誓沸,而不是簡單的where語句的參數(shù)匹配梅桩。fulltext索引配合match against操作使用,而不是一般的where語句加like拜隧。它可以在create table宿百,alter table ,create index使用洪添,不過目前只有char垦页、varchar,text 列上可以創(chuàng)建全文索引干奢。值得一提的是痊焊,在數(shù)據(jù)量較大時候,現(xiàn)將數(shù)據(jù)放入一個沒有全局索引的表中忿峻,然后再用CREATE index創(chuàng)建fulltext索引薄啥,要比先為一張表建立fulltext然后再將數(shù)據(jù)寫入的速度快很多。


MySQL索引方法

MySQL目前主要有以下幾種索引方法:B-Tree逛尚,Hash垄惧,R-Tree。

B-Tree

B-Tree是最常見的索引類型绰寞,所有值(被索引的列)都是排過序的到逊,每個葉節(jié)點到跟節(jié)點距離相等。所以B-Tree適合用來查找某一范圍內(nèi)的數(shù)據(jù)克握,而且可以直接支持?jǐn)?shù)據(jù)排序(ORDER BY)

B-Tree在MyISAM里的形式和Innodb稍有不同:

MyISAM表數(shù)據(jù)文件和索引文件是分離的蕾管,索引文件僅保存數(shù)據(jù)記錄的磁盤地址

InnoDB表數(shù)據(jù)文件本身就是主索引,葉節(jié)點data域保存了完整的數(shù)據(jù)記錄

Hash索引

僅支持"=","IN"和"<=>"精確查詢菩暗,不能使用范圍查詢:由于Hash索引比較的是進行Hash運算之后的Hash值,所以它只能用于等值的過濾旭蠕,不能用于基于范圍的過濾停团,因為經(jīng)過相應(yīng)的Hash算法處理之后的Hash

不支持排序:由于Hash索引中存放的是經(jīng)過Hash計算之后的Hash值旷坦,而且Hash值的大小關(guān)系并不一定和Hash運算前的鍵值完全一樣,所以數(shù)據(jù)庫無法利用索引的數(shù)據(jù)來避免任何排序運算

在任何時候都不能避免表掃描:由于Hash索引比較的是進行Hash運算之后的Hash值佑稠,所以即使取滿足某個Hash鍵值的數(shù)據(jù)的記錄條數(shù)秒梅,也無法從Hash索引中直接完成查詢,還是要通過訪問表中的實際數(shù)據(jù)進行相應(yīng)的比較舌胶,并得到相應(yīng)的結(jié)果

檢索效率高捆蜀,索引的檢索可以一次定位,不像B-Tree索引需要從根節(jié)點到枝節(jié)點幔嫂,最后才能訪問到頁節(jié)點這樣多次的IO訪問辆它,所以Hash索引的查詢效率要遠高于B-Tree索引

只有Memory引擎支持顯式的Hash索引,但是它的Hash是nonunique的履恩,沖突太多時也會影響查找性能锰茉。Memory引擎默認(rèn)的索引類型即是Hash索引,雖然它也支持B-Tree索引

R-Tree索引

R-Tree在MySQL很少使用切心,僅支持geometry數(shù)據(jù)類型飒筑,支持該類型的存儲引擎只有MyISAM、BDb绽昏、InnoDb协屡、NDb、Archive幾種全谤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末著瓶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子啼县,更是在濱河造成了極大的恐慌材原,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件季眷,死亡現(xiàn)場離奇詭異余蟹,居然都是意外死亡,警方通過查閱死者的電腦和手機子刮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門威酒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挺峡,你說我怎么就攤上這事葵孤。” “怎么了橱赠?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵尤仍,是天一觀的道長。 經(jīng)常有香客問我狭姨,道長宰啦,這世上最難降的妖魔是什么苏遥? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮赡模,結(jié)果婚禮上田炭,老公的妹妹穿的比我還像新娘。我一直安慰自己漓柑,他們只是感情好教硫,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辆布,像睡著了一般瞬矩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谚殊,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天丧鸯,我揣著相機與錄音,去河邊找鬼嫩絮。 笑死丛肢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剿干。 我是一名探鬼主播蜂怎,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼置尔!你這毒婦竟也來了杠步?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤榜轿,失蹤者是張志新(化名)和其女友劉穎幽歼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谬盐,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡甸私,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了飞傀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皇型。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖砸烦,靈堂內(nèi)的尸體忽然破棺而出弃鸦,到底是詐尸還是另有隱情,我是刑警寧澤幢痘,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布唬格,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏西轩。R本人自食惡果不足惜员舵,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一脑沿、第九天 我趴在偏房一處隱蔽的房頂上張望藕畔。 院中可真熱鬧,春花似錦庄拇、人聲如沸注服。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溶弟。三九已至,卻和暖如春瞭郑,著一層夾襖步出監(jiān)牢的瞬間辜御,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工屈张, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留擒权,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓阁谆,卻偏偏與公主長得像碳抄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子场绿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容