chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL索引的常用知識點(diǎn)

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-30 16:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

索引結(jié)構(gòu):B+樹

索引其實(shí)是一種數(shù)據(jù)結(jié)構(gòu)

注意B+樹是MySQL,索引默認(rèn)的結(jié)構(gòu);一張表至少有一個索引(主鍵索引),是可以有多個索引的

MySQL中的B+Tree

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

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

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

MyISAM與InnoDB 的區(qū)別

  1. InnoDB支持事務(wù),MyISAM不支持

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

  3. InnoDB是聚集索引,數(shù)據(jù)和索引存到同一個文件里;MyISAM是非聚集索引,數(shù)據(jù)和索引不在同一個文件里;都是使用B+Tree作為索引結(jié)構(gòu)

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

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

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

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

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

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

    • Innodb:frm是表定義文件,ibd是數(shù)據(jù)文件
    • Myisam:frm是表定義文件,myd是數(shù)據(jù)文件,myi是索引文件

索引失效的場景

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

小結(jié)

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 緩沖
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    18035
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    484

    瀏覽量

    71199
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40756
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    860

    瀏覽量

    27954
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    Jackson常用知識點(diǎn)和易錯點(diǎn)

    Jackson常用知識點(diǎn)和易錯點(diǎn)
    發(fā)表于 06-12 17:22

    電機(jī)選型設(shè)計的常用公式與知識點(diǎn)

    電機(jī)選型設(shè)計的常用公式與知識點(diǎn)匯總
    發(fā)表于 01-27 06:46

    linux常用的命令知識點(diǎn)

    Linux基礎(chǔ)命令的總結(jié)linux常用的命令知識點(diǎn)
    發(fā)表于 02-02 06:31

    STM32外部中斷知識點(diǎn)概述

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

    高一數(shù)學(xué)知識點(diǎn)總結(jié)

    高一數(shù)學(xué)知識點(diǎn)總結(jié)高一數(shù)學(xué)知識點(diǎn)總結(jié)高一數(shù)學(xué)知識點(diǎn)總結(jié)
    發(fā)表于 02-23 15:27 ?0次下載

    高二數(shù)學(xué)知識點(diǎn)總結(jié)

    高二數(shù)學(xué)知識點(diǎn)總結(jié)高二數(shù)學(xué)知識點(diǎn)總結(jié)高二數(shù)學(xué)知識點(diǎn)總結(jié)
    發(fā)表于 02-23 15:27 ?0次下載

    PWM知識點(diǎn)詳解

    PWM知識點(diǎn)
    發(fā)表于 03-16 08:00 ?44次下載

    MySQL索引的使用問題

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

    MySQL的基本知識點(diǎn)梳理和常用操作總結(jié)

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

    嵌入式知識點(diǎn)總結(jié)

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

    MySQL索引下推知識分享

    Mysql 是大家最常用的數(shù)據(jù)庫,下面為大家?guī)?mysql 索引下推知識點(diǎn)的分享,以便鞏固 mysql 基礎(chǔ)
    的頭像 發(fā)表于 12-27 09:49 ?839次閱讀

    數(shù)字電路知識點(diǎn)總結(jié)

    本文整理了數(shù)字電路課程中的相關(guān)基本的知識點(diǎn)和較為重要的知識點(diǎn),用于求職的數(shù)電部分的知識準(zhǔn)備,差缺補(bǔ)漏。
    的頭像 發(fā)表于 05-30 15:07 ?5712次閱讀
    數(shù)字電路<b class='flag-5'>知識點(diǎn)</b>總結(jié)

    MySQL高級進(jìn)階:索引優(yōu)化

    MySQL官方對于索引的定義:索引是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。
    的頭像 發(fā)表于 06-11 11:13 ?866次閱讀
    <b class='flag-5'>MySQL</b>高級進(jìn)階:<b class='flag-5'>索引</b>優(yōu)化

    STM32 RTOS知識點(diǎn)

    電子發(fā)燒友網(wǎng)站提供《STM32 RTOS知識點(diǎn).pdf》資料免費(fèi)下載
    發(fā)表于 08-01 14:28 ?4次下載
    STM32 RTOS<b class='flag-5'>知識點(diǎn)</b>

    MySQL知識點(diǎn)匯總

    大家好,這部分被稱為DQL部分,是每個學(xué)習(xí)MySQL必須要學(xué)會的部分,下面就讓我來介紹MySQL中的其他部分。
    的頭像 發(fā)表于 08-05 15:27 ?659次閱讀
    <b class='flag-5'>MySQL</b><b class='flag-5'>知識點(diǎn)</b>匯總