MySQL之索引

MySQL索引有哪些

索引是為了加速對(duì)表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu),由存儲(chǔ)引擎實(shí)現(xiàn)。mysql中索引有:b+tree索引炫彩、hash索引、全文索引絮短、rtree空間索引江兢,最普遍使用的是b+tree索引,hash索引在memory引擎中默認(rèn)使用戚丸,innodb引擎在對(duì)頻繁查找的行上為了優(yōu)化會(huì)自動(dòng)為表建立hash索引划址。使用innodb和myisam引擎可以在字符串文本數(shù)據(jù)上建立全文索引。

B+樹索引

B+樹索引優(yōu)勢(shì)

數(shù)據(jù)庫(kù)的數(shù)據(jù)是存儲(chǔ)在磁盤上限府,查找數(shù)據(jù)就是一次磁盤io操作夺颤。如果不使用索引,會(huì)對(duì)全表的數(shù)據(jù)進(jìn)行掃描查找胁勺,此時(shí)復(fù)雜度O(N)世澜。而采用平衡二叉樹復(fù)雜度為O(logN),為什么最后選擇B+樹呢署穗?
1.mysql讀取數(shù)據(jù)是按頁(yè)來(lái)讀寥裂,默認(rèn)是一頁(yè)對(duì)應(yīng)磁盤4個(gè)扇區(qū),一個(gè)扇區(qū)4K大小案疲,為了最大程度利用mysql一次讀取數(shù)據(jù)的大小封恰,而選擇將樹節(jié)點(diǎn)中的內(nèi)容增多。(B樹)
2.B+關(guān)鍵字對(duì)應(yīng)的數(shù)據(jù)保存在葉子節(jié)點(diǎn)褐啡,而且葉子節(jié)點(diǎn)是順序排列的诺舔,相鄰節(jié)點(diǎn)具有順序引用的關(guān)系,提高了排序能力和范圍查找能力。使磁盤IO變?yōu)檫B續(xù)IO低飒,讀寫能力更強(qiáng)许昨。(B+樹)
3.同時(shí)B+樹節(jié)點(diǎn)內(nèi)不存放數(shù)據(jù),比B樹節(jié)點(diǎn)的key更多褥赊,掃表能力更強(qiáng)糕档。

innodb和myisam引擎上的體現(xiàn)

myisam引擎中會(huì)給表建立兩個(gè)文件MYI文件、MYD文件拌喉,MYI文件存放索引速那,葉子節(jié)點(diǎn)存儲(chǔ)的是對(duì)應(yīng)行數(shù)據(jù)的磁盤地址。MYD文件存放的是磁盤地址與行數(shù)據(jù)的信息司光。從myi文件中查找對(duì)應(yīng)的磁盤地址琅坡,然后從myd文件中讀取數(shù)據(jù)悉患。
innodb引擎中會(huì)建立一個(gè)IBD文件残家,根據(jù)主鍵建立聚集索引,即葉子節(jié)點(diǎn)上就存放了行數(shù)據(jù)信息售躁。其他索引為輔助鍵索引坞淮,葉子節(jié)點(diǎn)上存放的是行數(shù)據(jù)的主鍵。也就是說如果通過非主鍵字段查找數(shù)據(jù)陪捷,會(huì)查找兩次b+樹回窘。原因:
1.innodb建立初衷認(rèn)為主鍵查詢是最常用的。
2.數(shù)據(jù)更新后市袖,行數(shù)據(jù)的磁盤地址會(huì)有改變 啡直,myisam需要維護(hù)相關(guān)多個(gè)索引,而innodb只要主鍵不變輔助索引就不需要維護(hù)苍碟。

怎么設(shè)置索引

1酒觅,經(jīng)常用的列優(yōu)先 【最左匹配原則】
2,選擇性(離散度)高的列優(yōu)先【離散度高原則】 微峰,選擇離散型高的列建立索引舷丹,索引列的離散性越高,樹的選擇性就越好蜓肆。
3颜凯,寬度小的列優(yōu)先【最少空間原則】,占用空間少仗扬,節(jié)點(diǎn)可以存儲(chǔ)更多的key症概。

補(bǔ)充

覆蓋索引

如果查詢列可通過索引節(jié)點(diǎn)中的關(guān)鍵字直接返回,則該索引稱之為 覆蓋索引早芭。
覆蓋索引可減少數(shù)據(jù)庫(kù)IO彼城,將隨機(jī)IO變?yōu)轫樞騃O,可提高查詢性能

索引小技巧

索引列的數(shù)據(jù)長(zhǎng)度能少則少。
索引一定不是越多越好精肃,越全越好秤涩,一定是建合適的。
匹配列前綴可用到索引 like 9999%司抱,like %9999%筐眷、like %9999用不到索引; Where 條件中 not in 和 <>操作無(wú)法使用索引习柠; 匹配范圍值匀谣,order by 也可用到索引;
多用指定列查詢资溃,只返回自己想到的數(shù)據(jù)列武翎,少用select *;
聯(lián)合索引中如果不是按照索引最左列開始查找溶锭,無(wú)法使用索引宝恶;
聯(lián)合索引中精確匹配最左前列并范圍匹配另外一列可以用到索引;
聯(lián)合索引中如果查詢中有某個(gè)列的范圍查詢趴捅,則其右邊的所有列都無(wú)法使用索引

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垫毙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拱绑,更是在濱河造成了極大的恐慌综芥,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猎拨,死亡現(xiàn)場(chǎng)離奇詭異膀藐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)红省,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門额各,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人类腮,你說我怎么就攤上這事臊泰。” “怎么了蚜枢?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵缸逃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我厂抽,道長(zhǎng)需频,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任筷凤,我火速辦了婚禮昭殉,結(jié)果婚禮上苞七,老公的妹妹穿的比我還像新娘。我一直安慰自己挪丢,他們只是感情好蹂风,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乾蓬,像睡著了一般惠啄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上任内,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天撵渡,我揣著相機(jī)與錄音,去河邊找鬼死嗦。 笑死趋距,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的越除。 我是一名探鬼主播节腐,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼廊敌!你這毒婦竟也來(lái)了铜跑?” 一聲冷哼從身側(cè)響起门怪,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤骡澈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后掷空,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肋殴,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年坦弟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了护锤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡酿傍,死狀恐怖烙懦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赤炒,我是刑警寧澤氯析,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站莺褒,受9級(jí)特大地震影響掩缓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜遵岩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一你辣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦舍哄、人聲如沸宴凉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)跪解。三九已至,卻和暖如春签孔,著一層夾襖步出監(jiān)牢的瞬間叉讥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工饥追, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留图仓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓但绕,卻偏偏與公主長(zhǎng)得像救崔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捏顺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

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