在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MySQL索引的常用知識點

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-09-30 16:43 ? 次閱讀

索引結構:B+樹

索引其實是一種數據結構

注意B+樹是MySQL,索引默認的結構;一張表至少有一個索引(主鍵索引),是可以有多個索引的

MySQL中的B+Tree

  1. 非葉子節點也叫內部節點,只存儲 健值(主鍵的值) + 指針(存儲子節點的地址信息)
    • 主鍵索引:健值(主鍵的值) + 指針(存儲子節點的地址信息)
    • 非主鍵索引:非主鍵列的值 + 指向下一個節點的指針(存儲子節點的地址信息)
  2. 所有的數據都存在葉子節點中;
    • 同時葉子節點上還存有一個指向相鄰葉子節點的指針
    • 如果是聚簇索引(主鍵索引),葉子節點存儲的是實際數據
    • 如果是非聚簇索引,則保存的是聚簇索引的索引key,也就是主鍵索引的值;查詢非聚簇索引會有一個回表操作
  3. B+Tree的每個葉子節點增加了一個指向相鄰葉子節點的指針,它的最后一個數據會指向下一個葉子節點的第一個數據,形成了一個有序鏈表的結構。

為什么B+ 樹比B 樹更適合作為索引?

  1. B+ 樹的磁盤讀寫代價更低 B+ 樹的數據都集中在葉子節點,分支節點 只負責指針(索引);B 樹的分支節點既有指針也有數據 。這將導致B+ 樹的層高會小于B 樹的層高,也就是說B+ 樹平均的Io次數會小于B 樹。
  2. B+ 樹的查詢效率更加穩定 B+ 樹的數據都存放在葉子節點,故任何關鍵字的查找必須走一條從根節點到葉子節點的路徑。所有關鍵字的查詢路徑相同,每個數據查詢效率相當。
  3. B+樹更便于遍歷 由于B+樹的數據都存儲在葉子結點中,分支結點均為索引,遍歷只需要掃描一遍葉子節點即可;B樹因為其分支結點同樣存儲著數據,要找到具體的數據,需要進行一次中序遍歷按序來搜索。
  4. B+樹更擅長范圍查詢 B+樹葉子節點存放數據,數據是按順序放置的雙向鏈表。B樹范圍查詢只能中序遍歷。
  5. B+ 樹占用內存空間小 B+ 樹索引節點沒有數據,比較小。在內存有限的情況下,相比于B樹索引可以加載更多B+ 樹索引。

MyISAM與InnoDB 的區別

  1. InnoDB支持事務,MyISAM不支持

  2. InnoDB支持外鍵,而MyISAM不支持

  3. InnoDB是聚集索引,數據和索引存到同一個文件里;MyISAM是非聚集索引,數據和索引不在同一個文件里;都是使用B+Tree作為索引結構

  4. InnoDB不保存表的具體行數,執行select count(*) from table時需要全表掃描。而MyISAM用一個變量保存了整個表的行數,執行上述語句時只需要讀出該變量即可,速度很快(注意不能加有任何WHERE條件)

    因為InnoDB的事務特性,在同一時刻表中的行數對于不同的事務而言是不一樣的,因此count統計會計算對于當前事務而言可以統計到的行數,而不是將總行數儲存起來方便快速查詢。InnoDB會嘗試遍歷一個盡可能小的索引除非優化器提示使用別的索引。如果二級索引不存在,InnoDB還會嘗試去遍歷其他聚簇索引。

    如果索引并沒有完全處于InnoDB維護的緩沖區(Buffer Pool)中,count操作會比較費時。可以建立一個記錄總行數的表并讓你的程序在INSERT/DELETE時更新對應的數據。和上面提到的問題一樣,如果此時存在多個事務的話這種方案也不太好用。如果得到大致的行數值已經足夠滿足需求可以嘗試SHOW TABLE STATUS

    • 那么為什么InnoDB沒有了這個變量呢?
  5. InnoDB支持表、行(默認)級鎖,而MyISAM僅支持表級鎖

  6. InnoDB表必須有唯一索引(如主鍵)(用戶沒有指定的話會自己找/生產一個隱藏列Row_id來充當默認主鍵),而Myisam可以沒有主鍵

  7. Innodb存儲文件有frm、ibd,而Myisam是frm、MYD、MYI

    • Innodb:frm是表定義文件,ibd是數據文件
    • Myisam:frm是表定義文件,myd是數據文件,myi是索引文件

索引失效的場景

  1. 對索引列使用了函數、表達式或運算符:當查詢條件中使用了函數、表達式或運算符時,MySQL就無法使用該列的索引,因為它需要對每行數據進行計算,而不是直接查找索引。
  2. 查詢條件中使用了不等于操作符(<>、!=)、NOT NULL, NOT IN 等
  3. 模糊查詢:當查詢條件中使用了LIKE、%或_等模糊匹配符號時,MySQL無法使用索引進行快速定位。
  4. OR條件:當查詢條件中包含多個OR條件時,MySQL無法使用索引進行快速定位。
  5. 范圍查詢:當查詢條件中使用了BETWEEN、<、>、<=、>=等操作符時,MySQL只能使用索引中的一部分數據,需要讀取更多的數據進行過濾,降低了查詢效率。
  6. 數據類型不匹配,需要隱式轉換類型
  7. 對索引列進行排序,因為它需要將數據按照指定的順序進行排序
  8. 復合索引,如果不使用前列,后續列也將無法使用

小結

正確的使用索引,能夠顯著提高數據庫的查詢效率。本文匯總了MySQL索引的常用知識點,幫助大家快速記憶

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 緩沖
    +關注

    關注

    0

    文章

    53

    瀏覽量

    17896
  • 指針
    +關注

    關注

    1

    文章

    483

    瀏覽量

    70711
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40329
  • MySQL
    +關注

    關注

    1

    文章

    836

    瀏覽量

    26948
收藏 人收藏

    評論

    相關推薦

    Jackson常用知識點和易錯

    Jackson常用知識點和易錯
    發表于 06-12 17:22

    電機選型設計的常用公式與知識點

    電機選型設計的常用公式與知識點匯總
    發表于 01-27 06:46

    linux常用的命令知識點

    Linux基礎命令的總結linux常用的命令知識點
    發表于 02-02 06:31

    STM32外部中斷知識點概述

    STM32外部中斷概述知識點(1)知識點(2)知識點(3)中斷服務函數外部中斷常用庫函數外部中斷的一般配置步驟知識點(1)STM32的每個I
    發表于 08-16 07:43

    高一數學知識點總結

    高一數學知識點總結高一數學知識點總結高一數學知識點總結
    發表于 02-23 15:27 ?0次下載

    高二數學知識點總結

    高二數學知識點總結高二數學知識點總結高二數學知識點總結
    發表于 02-23 15:27 ?0次下載

    PWM知識點詳解

    PWM知識點
    發表于 03-16 08:00 ?44次下載

    MySQL索引的使用問題

    MySQL 在LIKE進行模糊匹配的時候又是如何利用索引的呢?3、MySQL 到底在怎么樣的情況下能夠利用索引進行排序?今天,我將會用一個模型,把這些問題都一一解答,讓你對
    的頭像 發表于 01-06 16:13 ?1684次閱讀

    MySQL的基本知識點梳理和常用操作總結

    本文主要是總結了工作中一些常用的操作,以及不合理的操作,在對慢查詢進行優化時收集的一些有用的資料和信息,本文適合有mysql基礎的開發人員。 一、索引相關 1、索引基數:基數是數據列所
    的頭像 發表于 02-04 13:44 ?1793次閱讀
    <b class='flag-5'>MySQL</b>的基本<b class='flag-5'>知識點</b>梳理和<b class='flag-5'>常用</b>操作總結

    嵌入式知識點總結

    嵌入式知識點總結(arm嵌入式開發led過程)-嵌入式知識點總結? ? ? ? ? ? ? ? ? ??
    發表于 07-30 14:20 ?23次下載
    嵌入式<b class='flag-5'>知識點</b>總結

    MySQL索引下推知識分享

    Mysql 是大家最常用的數據庫,下面為大家帶來 mysql 索引下推知識點的分享,以便鞏固 mysql 基礎
    的頭像 發表于 12-27 09:49 ?720次閱讀

    數字電路知識點總結

    本文整理了數字電路課程中的相關基本的知識點和較為重要的知識點,用于求職的數電部分的知識準備,差缺補漏。
    的頭像 發表于 05-30 15:07 ?5189次閱讀
    數字電路<b class='flag-5'>知識點</b>總結

    MySQL高級進階:索引優化

    MySQL官方對于索引的定義:索引是幫助MySQL高效獲取數據的數據結構。
    的頭像 發表于 06-11 11:13 ?661次閱讀
    <b class='flag-5'>MySQL</b>高級進階:<b class='flag-5'>索引</b>優化

    STM32 RTOS知識點

    電子發燒友網站提供《STM32 RTOS知識點.pdf》資料免費下載
    發表于 08-01 14:28 ?3次下載
    STM32 RTOS<b class='flag-5'>知識點</b>

    MySQL知識點匯總

    大家好,這部分被稱為DQL部分,是每個學習MySQL必須要學會的部分,下面就讓我來介紹MySQL中的其他部分。
    的頭像 發表于 08-05 15:27 ?499次閱讀
    <b class='flag-5'>MySQL</b><b class='flag-5'>知識點</b>匯總
    主站蜘蛛池模板: 女人特黄大aaaaaa大片 | 成人理论片 | 国产三级国产精品 | 国产福利不卡一区二区三区 | 琪琪午夜免费影院在线观看 | 天天操夜夜操天天操 | xxxx日本老师hd| 色多多在线观看 | 黄 色 免 费 网站在线观看 | 精品国产自在现线看久久 | 最新国产你懂的在线网址 | 久久精品亚洲青青草原 | 一级特黄a大片免费 | 黄色w站| 五月激情啪啪网 | 嫩草影院地址一地址二 | 国产小视频在线免费观看 | 婷婷色激情 | 天天操天天干天搞天天射 | 天堂网在线最新版www中文网 | 亚洲天堂一区二区三区 | 四虎最新紧急入口4hu | 欧美伊久线香蕉线新在线 | 久久久久久噜噜噜久久久精品 | 亚洲免费色视频 | 欧美成人影院 | 国产精品777 | 国产成人精品日本亚洲网站 | 日韩视频 中文字幕 视频一区 | www国产永久免费视频看看 | 一级片在线免费播放 | 五月四房婷婷 | 中文字幕精品一区二区三区视频 | 精品精品国产高清a毛片牛牛 | 午夜大片在线观看 | 又黄又涩的视频 | 欧美第一色 | 户外露出 自拍系列 | 天天爽天天爱 | 亚洲美女高清一区二区三区 | 在线中文天堂 |