MySQL(Mariadb)總結4 - MySQL 索引和explain

MySQL中的索引

基本法則:索引應該構建在被用作查詢條件的字段.

索引的類型:

  • B+ Tree索引: 順序存儲,每一個葉子節(jié)點到根節(jié)點的距離是相同的;左前綴索引,適合查詢范圍類的數(shù)據(jù).
    • 可以使用B-Tree索引的查詢類型:
      • 全鍵值:
      • 鍵值范圍:
      • 鍵前綴:
    • 不適合使用B-Tree索引的場景:
      • 如果不是從最左列開始,索引無效;
      • 不能跳過索引中的列;
      • 躲過查詢中某個列是范圍查詢,那么其右側的列都無法再使用索引優(yōu)化查詢;
  • Hash索引: 基于哈希表實現(xiàn),特別使用于匹配索引鐘的所有列;
    • 只有Memory存儲;引擎支持顯式hash索引;
    • 適用場景:
      • 只支持等值比較查詢, 包括=,IN(),<=>;
    • 不適宜hash索引的場景:
      • 存儲的值為順序的,因此,不實用于順序查詢;
      • 不支持模糊查詢;
  • 空間索引(R-Tree):
    • MyISAM支持
  • 全文索引(FULLTEXT):
    • 在文本中查找關鍵詞;

索引的優(yōu)點:

  • 索引可以降低服務需要掃描的數(shù)據(jù)量,減少IO次數(shù);
  • 索引可以幫助服務器避免排序和使用臨時表;
  • 索引可以幫助降隨機I/O轉(zhuǎn)化為順序I/O;

高性能索引策略:

  • 獨立使用列,盡量避免其參與運算;
  • 左前綴索引: 索引構建于字段的左側的多少個字符,要通過索引選擇性來評估
    • 索引選擇性:不重復的索引值和數(shù)據(jù)表的記錄總數(shù)的比值;
  • 多列索引: AND操作時更適合使用多列索引;
  • 選擇合適的索引次序:將選擇性最高的放左側;

冗余和重復索引:

  • 不好的索引使用策略;

通過EXPLAIN來分析索引的有效性

EXPLAIN SELECT clause,獲取查詢執(zhí)行計劃性息,用來查看查詢優(yōu)化器如何執(zhí)行查詢;

輸出:

  • id - 當前查詢語句鐘,每個SELECT語句的編號;
    • 復雜類型的查詢有三種:
      • 簡單子查詢;
      • 用于FROM中的子查詢;
      • 聯(lián)合查詢: UNION;
    • 注意: UNION查詢的分析記過會出現(xiàn)一額外匿名臨時表;
  • select_type
    • 簡單查詢?yōu)镾IMPLE;
    • 復雜查詢:
      • SUBQUERY:簡單子查詢;
      • DERIVED: 用于FROM中的子查詢;
      • UNION: UNION 語句的第一個之后的SELECT語句;
      • UNION RESULT: 匿名臨時表;
  • table: SELECT語句關聯(lián)到的表;
  • type: 關聯(lián)類型,或訪問類型,即MySQL決定的如何去查找表中的行的方式;
    • ALL: 全表掃描;
    • index: 根據(jù)索引的次序進行全表掃描;如果在Extra列出現(xiàn)"Using index"表示使用了覆蓋索引,而非全表索引;
    • range: 有范圍限制的根據(jù)索引實現(xiàn)范圍掃描;
    • ref: 根據(jù)縮影返回表中匹配單個值的所有行;
    • eq_ref: 僅返回一個行,但需要額外與某個參考值做比較;
    • const,system: 直接返回單個行;
  • possible_keys: 查詢可能會用到的索引;
  • key: 查詢鐘使用的索引;
  • key_len: 在索引中使用的字節(jié)數(shù);
  • ref: 在利用key字段所表示的索引完成查詢時所有的列或常值量;
  • rows: MySQL估計為找到所有目標行而需要讀取的行數(shù);
  • Extra: 額外信息
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末飞蹂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子始锚,更是在濱河造成了極大的恐慌穿仪,老刑警劉巖烤镐,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡臼氨,警方通過查閱死者的電腦和手機志群,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門着绷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赖舟,你說我怎么就攤上這事蓬戚。” “怎么了宾抓?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵子漩,是天一觀的道長。 經(jīng)常有香客問我石洗,道長幢泼,這世上最難降的妖魔是什么哟冬? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任各墨,我火速辦了婚禮,結果婚禮上赠潦,老公的妹妹穿的比我還像新娘。我一直安慰自己招驴,他們只是感情好篙程,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著别厘,像睡著了一般虱饿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上触趴,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天氮发,我揣著相機與錄音,去河邊找鬼冗懦。 笑死爽冕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的披蕉。 我是一名探鬼主播颈畸,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嚣艇!你這毒婦竟也來了承冰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤食零,失蹤者是張志新(化名)和其女友劉穎困乒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贰谣,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡娜搂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吱抚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片百宇。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖秘豹,靈堂內(nèi)的尸體忽然破棺而出携御,到底是詐尸還是另有隱情,我是刑警寧澤既绕,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布啄刹,位于F島的核電站,受9級特大地震影響凄贩,放射性物質(zhì)發(fā)生泄漏誓军。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一疲扎、第九天 我趴在偏房一處隱蔽的房頂上張望昵时。 院中可真熱鬧捷雕,春花似錦、人聲如沸壹甥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盹廷。三九已至征绸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俄占,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工淆衷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缸榄,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓祝拯,卻偏偏與公主長得像甚带,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子佳头,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

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