国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

對 B+ 樹與索引在 MySQL 中的認識

數據分析與開發 ? 來源:博客園 ? 作者:AnnsShadoW ? 2021-11-08 11:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

本質:數據庫維護某種數據結構以某種方式引用(指向)數據

索引取舍原則:索引的結構組織要盡量減少查找過程中磁盤I/O的存取次數

B樹

滿足的條件

d為大于1的一個正整數,稱為B-Tree的度

h為一個正整數,稱為B-Tree的高度

每個非葉子節點由n-1個key和n個指針組成,其中d《=n《=2d

每個葉子節點最少包含一個key和兩個指針,最多包含2d-1個key和2d個指針,葉節點的指針均為null

所有葉節點具有相同的深度,等于樹高h

key和指針互相間隔,節點兩端是指針

一個節點中的key從左到右非遞減排列

所有節點組成樹結構

每個指針要么為null,要么指向另外一個節點

一個度為d的B-Tree,設其索引N個key,則其樹高h的上限為logd((N+1)/2),檢索一個key查找節點的個數的漸進復雜度為logd(N)

更新后的操作

插入刪除新的數據記錄會破壞B-Tree的性質,因此在插入刪除時,需要對樹進行一個分裂、合并、轉移等操作以保持B-Tree性質

B+樹

bb7b4ebc-3fc2-11ec-9195-dac502259ad0.jpg

每個節點的指針上限為2d而不是2d+1

內節點不存儲data,只存儲key

葉子節點不存儲指針

在經典B+樹的基礎上,增加了順序訪問指針--》提高區間訪問的性能

為什么使用B/B+樹?

主存讀取

當系統需要讀取主存時,則將地址信號放到地址總線上傳給主存

主存讀到地址信號后,解析信號并定位到指定存儲單元,然后將此存儲單元數據放到數據總線上,供其它部件讀取

主存存取的時間僅與存取次數呈線性關系,因為不存在機械操作,兩次存取的數據的“距離”不會對時間有任何影響

磁盤存取原理

磁盤轉動,每個磁頭不動,負責讀取內容

不過已經有了多磁頭獨立技術

局部性原理

磁盤預讀:長度一般以頁的整數倍為單位

MyISAM索引實現

使用B+樹作為索引結構,data存放數據記錄的地址

索引文件與數據文件分離

主索引和輔助索引(Secondary key)在結構上沒有任何區別,只是主索引要求key是唯一的,而輔助索引的key可以重復

非聚集:MyISAM中索引檢索的算法為首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,則取出其data域的值,然后以data域的值為地址,讀取相應數據記錄

.MYI文件的組成

整個索引文件的基本信息state

各索引的限制信息base

各索引的定義信息keydef

各索引記錄的概要信息recinfo

讀取索引的流程

query請求,直接讀取key cache中的cache block,有就返回

沒有就到.MYI文件中以file block方式讀取數據

再以相同的格式存取key cache

再將key cache中的數據返回

InnoDB索引實現

也是使用B+樹

第一個與MyISAM的不同點

第一個重大區別是InnoDB的數據文件本身就是索引文件,表數據文件本身就是按B+Tree組織的一個索引結構

InnoDB的數據文件本身要按主鍵聚集

所以InnoDB要求表必須有主鍵(MyISAM可以沒有)

沒有顯式指定,自動選擇唯一標識列

不存在的話,生成6個字節長整型的隱含字段

第二個與MyISAM的不同點

InnoDB的輔助索引data域存儲相應記錄主鍵的值而不是地址

換句話說,InnoDB的所有輔助索引都引用主鍵作為data域

輔助索引搜索需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然后用主鍵到主索引中檢索獲得記錄

得出的優化點

不建議使用過長的字段作為主鍵,因為所有輔助索引都引用主索引,過長的主索引會令輔助索引變得過大

用非單調的字段作為主鍵在InnoDB中也不好,因為InnoDB數據文件本身是一顆B+Tree,非單調的主鍵會造成在插入新記錄時數據文件為了維持B+Tree的特性而頻繁的分裂調整,十分低效,而使用自增字段作為主鍵就很不錯了

聚簇索引鍵被更新造成的成本除了索引數據可能會移動,相關的所有記錄數據也要移動

索引使用策略及優化

全列匹配

按照索引中所有列進行精確匹配(這里精確匹配指“=”或“IN”匹配)時,索引可以被用到

理論上索引對順序是敏感的,但是由于MySQL的查詢優化器會自動調整where子句的條件順序以使用適合的索引

最左前綴匹配

當查詢條件精確匹配索引的左邊連續一個或幾個列時,索引可以被用到

查詢條件用到了索引中列的精確匹配,但是中間某個條件未提供

只能用到索引中,從中間斷開前的列

應對

可以增加輔助索引

當中間條件選項較少時,用隔離列的方式,使用IN包含

看情況,比較建立

查詢條件沒有指定索引第一列

不滿足使用索引的條件

匹配某列的前綴字符串

可以使用索引

如果通配符%不出現在開頭,則可以用到索引,但根據具體情況不同可能只會用其中一個前綴

范圍查詢

范圍列可以用到索引(必須是最左前綴),但是范圍列后面的列無法用到索引

同時,索引最多用于一個范圍列,因此如果查詢條件中有兩個范圍列則無法全用到索引

僅用explain可能無法區分范圍索引和多值匹配

查詢條件中含有函數/表達式

一般不使用哦

手工算好再代入

索引選擇性與前綴索引

MyISAM與InnoDB基數統計方式

MyisAM索引的基數值(Cardinality,show index 命令可以看見)是精確的,InnoDB則是估計值

MyisAM統計信息是保存磁盤中,在alter表或Analyze table操作更新此信息

而InnoDB則是在表第一次打開的時候估計值保存在緩存區內

不建議建立索引的情況

表記錄比較少

索引的選擇性低:不重復的索引值(也叫基數,Cardinality)與表記錄數(#T)的比值

前綴索引

用列的前綴代替整個列作為索引key,當前綴長度合適時,可以做到既使得前綴索引的選擇性接近全列索引,同時因為索引key變短而減少了索引文件的大小和維護開銷

缺點

不能用于ORDER BY和GROUP BY操作

也不能用于Covering index(即當索引本身包含查詢所需全部數據時,不再訪問數據文件本身)

InnoDB主鍵選擇與插入優化

如果沒有特別的需要,請永遠使用一個與業務無關的自增字段作為主鍵

InnoDB使用聚集索引,數據記錄本身被存于主索引(一顆B+Tree)的葉子節點上

這就要求同一個葉子節點內(大小為一個內存頁或磁盤頁)的各條數據記錄按主鍵順序存放,因此每當有一條新的記錄插入時,MySQL會根據其主鍵將其插入適當的節點和位置,如果頁面達到裝載因子(InnoDB默認為15/16),則開辟一個新的頁(節點)

如果使用非自增主鍵,每次插入近似隨機,容易引起數據的移動,重新讀目標頁面,碎片也多了,雖然也可以用OPTIMIZE TABLE重建優化,但麻煩啊

參考資料

圖片來源網絡

《高性能MySQL》

作者:AnnsShadoW

https://www.cnblogs.com/annsshadow/p/5355090.html

編輯:jq

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

    關注

    1

    文章

    398

    瀏覽量

    26470
  • 數據庫
    +關注

    關注

    7

    文章

    4019

    瀏覽量

    68335
  • MySQL
    +關注

    關注

    1

    文章

    905

    瀏覽量

    29517

原文標題:對 B+ 樹與索引在 MySQL 中的認識

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    潤芯微科技完成近4億元B+輪融資

    1月29日,國產智能基座方案提供商潤芯微科技(RIVOTEK)正式宣布完成近4億元B+輪融資。本輪融資由重慶長嘉縱橫私募股權投資基金、恒旭資本、江蘇省戰新基金、蘇州高鐵新城國控等多家國資及產業資本
    的頭像 發表于 01-29 16:15 ?299次閱讀

    無線傾角傳感器監測的應用:以科技守護活文物的結構安全

    無線傾角傳感器監測的應用:以科技守護活文物的結構安全
    的頭像 發表于 01-09 11:38 ?650次閱讀
    無線傾角傳感器<b class='flag-5'>在</b>古<b class='flag-5'>樹</b>監測<b class='flag-5'>中</b>的應用:以科技守護活文物的結構安全

    工業數據臺支持接入MySQL數據庫嗎

    工業數據臺完全支持接入MySQL數據庫 ,且通過數據同步、集成與治理等技術手段,能夠充分發揮MySQL在數據存儲與事務處理方面的優勢,同時彌補其在數據分析與共享能力上的不足,具體分析如下: 技術
    的頭像 發表于 12-04 11:23 ?373次閱讀
    工業數據<b class='flag-5'>中</b>臺支持接入<b class='flag-5'>MySQL</b>數據庫嗎

    為什么充電過程HY2213-BB3A會特別特別燙,這應該如何解決?

    打開,用Type-C充電,充滿電后燈熄滅“充電”這個燈熄滅,未拔下Type-C的情況下,而且R640歐姆電阻也為焊上,我用萬用表測量B+和GND電壓,32芯片燒了,這是為什么,有什么解決辦法 原理圖 PCB 如下,入門小白,
    發表于 11-26 21:05

    Hudi系列:Hudi核心概念之索引(Indexs)

    上的Instant action操作類型 ?1.4 時間線上State狀態類型 ?1.5 時間線官網實例 ?二. 文件布局 ?三. 索引 3.1 簡介 3.2 對比其它(Hive)沒有索引的區別 3.2
    的頭像 發表于 10-21 09:47 ?387次閱讀
    Hudi系列:Hudi核心概念之<b class='flag-5'>索引</b>(Indexs)

    先楫半導體完成B+輪融資,移和創投資加持

    2025年9月10日,上海|國產高性能MCU產品及嵌入式解決方案供應商“上海先楫半導體科技有限公司”(先楫半導體,HPMicro)完成B+輪戰略融資,獲中國移動旗下移和創投資加持,投資方還包括浦東
    的頭像 發表于 09-11 08:32 ?1441次閱讀
    先楫半導體完成<b class='flag-5'>B+</b>輪融資,<b class='flag-5'>中</b>移和創投資加持

    宜科MVT閥島科技人形機器人中的應用

    科技飛速發展的當下,機器人行業正以前所未有的速度蓬勃興起。其中,宇科技作為行業內的佼佼者,憑借其創新的產品和領先的技術,全球機器人市場占據了重要地位。從四足機器人到人形機器人,
    的頭像 發表于 08-16 17:31 ?1487次閱讀

    MySQL慢查詢終極優化指南

    作為一名在生產環境摸爬滾打多年的運維工程師,我見過太多因為慢查詢導致的線上故障。今天分享一套經過實戰檢驗的MySQL慢查詢分析與索引優化方法論,幫你徹底解決數據庫性能瓶頸。
    的頭像 發表于 08-13 15:55 ?843次閱讀

    2.88億!濾波器明星企業新聲半導體完成B+輪融資

    據傳感器專家網獲悉,近日,濾波器明星企業新聲半導體宣布已完成2.88億元B+輪融資,本輪融資由洪泰基金領投,其他投資方包括泓生資本、滕華投資、中山金控、合肥市建投集團及濱湖金投集團。 值得一提的是
    的頭像 發表于 08-12 19:16 ?1471次閱讀
    2.88億!濾波器明星企業新聲半導體完成<b class='flag-5'>B+</b>輪融資

    MySQL 8.0性能優化實戰指南

    作為一名運維工程師,MySQL數據庫優化是我們日常工作中最具挑戰性的任務之一。MySQL 8.0作為當前主流版本,性能、安全性和功能上都有了顯著提升,但如何充分發揮其潛力,仍需要我們掌握正確的優化策略。
    的頭像 發表于 07-24 11:48 ?848次閱讀

    MySQL數據備份與恢復策略

    數據是企業的核心資產,MySQL作為主流的關系型數據庫管理系統,其數據的安全性和可靠性至關重要。本文將深入探討MySQL的數據備份策略、常用備份工具以及數據恢復的最佳實踐,幫助運維工程師構建完善的數據保護體系。
    的頭像 發表于 07-14 11:11 ?725次閱讀

    企業級MySQL數據庫管理指南

    在當今數字化時代,MySQL作為全球最受歡迎的開源關系型數據庫,承載著企業核心業務數據的存儲與處理。作為數據庫管理員(DBA),掌握MySQL的企業級部署、優化、維護技能至關重要。本文將從實戰角度出發,系統闡述MySQL
    的頭像 發表于 07-09 09:50 ?716次閱讀

    介紹三種常見的MySQL高可用方案

    方案——MHA(MySQL High Availability Manager)、PXC(Percona XtraDB Cluster) 和 Galera Cluster。我們將從原理、架構、優勢和局限性等角度對比這三種方案,并探討它們實際應用
    的頭像 發表于 05-28 17:16 ?1235次閱讀

    MySQL數據庫是什么

    MySQL數據庫是一種 開源的關系型數據庫管理系統(RDBMS) ,由瑞典MySQL AB公司開發,后被Oracle公司收購。它通過結構化查詢語言(SQL)進行數據存儲、管理和操作,廣泛應用于Web
    的頭像 發表于 05-23 09:18 ?1202次閱讀

    北大教授領銜,無錫一傳感器公司完成B+輪數千萬元融資

    近日,北微傳感科技有限公司(下文簡稱“北微傳感”)宣布,已完成數千萬B+輪融資。本輪投資方尚未公布。
    的頭像 發表于 05-13 10:36 ?692次閱讀