国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Mysql】索引數(shù)據(jù)結(jié)構(gòu)深入研究(二)

這篇具有很好參考價值的文章主要介紹了【Mysql】索引數(shù)據(jù)結(jié)構(gòu)深入研究(二)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

在這里需要明確的一點是,數(shù)據(jù)庫的引擎InnoDB或者是MyISAM引擎它們是形容數(shù)據(jù)表的,不是形容數(shù)據(jù)庫的。
另外:文章中提到的索引的數(shù)據(jù)結(jié)構(gòu)暫且都默認使用B+Tree

InnoDB引擎

InnoDB的索引數(shù)據(jù)文件有兩個,tableName.frm和tableName.ibd文件。

  • frm文件:表結(jié)構(gòu)相關(guān)信息
  • ibd文件:所有數(shù)據(jù)(按照索引數(shù)據(jù)結(jié)構(gòu)構(gòu)建的)
    【Mysql】索引數(shù)據(jù)結(jié)構(gòu)深入研究(二),Mysql,mysql,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)庫

在InnoDB表中,索引存儲的是葉子節(jié)點上存儲的是具體的數(shù)據(jù)。

MyISAM引擎

MyISAM的索引數(shù)據(jù)文件有三個,tableName.frm、tableName.MYD和tableName.MYI文件

  • frm文件:表結(jié)構(gòu)的相關(guān)信息(字段啊什么信息)
  • MYD文件:數(shù)據(jù)存儲(具體的數(shù)據(jù))
  • MYI文件:索引存儲(存放索引數(shù)據(jù))
    【Mysql】索引數(shù)據(jù)結(jié)構(gòu)深入研究(二),Mysql,mysql,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)庫
select * from table where table.Col1 = 30;

我們查詢上述Col1為30的數(shù)據(jù),會從MYI文件中索引數(shù)據(jù)結(jié)構(gòu)中查找對于的數(shù)據(jù),找到葉子節(jié)點之后MyISAM引擎的葉子節(jié)點不會存儲具體的數(shù)據(jù),而是存儲對于數(shù)據(jù)所在的磁盤地址,然后在從MYD文件中找到具體的對應(yīng)行數(shù)據(jù)。

在這里我們只了解兩種引擎下的數(shù)據(jù)存儲文件結(jié)構(gòu),了解了這兩種索引文件存儲結(jié)構(gòu)之后我們繼續(xù)往下

聚集索引(聚簇索引)

葉子節(jié)點包含了完整的數(shù)據(jù)記錄,在InnoDB的主鍵索引就是一個聚集索引。

非聚集索引(非聚簇索引)

比如MyISAM引擎的主鍵索引就是一個非聚集索引,MYI索引文件中的葉子節(jié)點存儲的數(shù)據(jù)對應(yīng)著MYD文件中的具體數(shù)據(jù)。


這里有三個問題:
1.為什么建議InnoDB表建議建主鍵,并且推薦使用整型的自增主鍵?

  • 表數(shù)據(jù)文件(ibd)文件本身就是按照B+Tree組織的一個索引結(jié)構(gòu)文件,如果我們不建主鍵,它會默認選擇一列(所有數(shù)據(jù)不相等的數(shù)據(jù)),如果所有列都不符合的話它會幫我們建一個隱藏列,隱藏列會幫我們維護一個唯一ID,然后來組織整張表的索引數(shù)據(jù),這樣會造成不必要的開銷。
  • 使用整型的主鍵是因為在進行索引查找的時候是從根節(jié)點進行查詢?nèi)缓筮M行大小比較整型的效率一定會大于非整形的比對效率,并且整型的磁盤空間占用要小于非整型
  • 使用自增主鍵會增加插入效率,如果使用非自增的主鍵,會導(dǎo)致索引的數(shù)據(jù)結(jié)構(gòu)重新排列(B+Tree是排好序的數(shù)據(jù)結(jié)構(gòu))和樹的平衡,自增主鍵只會往右開辟節(jié)點

2.聚集索引和非聚集索引查詢效率如何?

從上面很容易看出來,聚集索引可以很直接的拿到數(shù)據(jù),因此聚集索引效率要高

3.為什么非主鍵索引(二級索引,非聚集索引)結(jié)構(gòu)葉子節(jié)點存儲的是主鍵值(如圖)

一致性和節(jié)省存儲空間:節(jié)約空間應(yīng)該比較好理解,一致性問題就是減少復(fù)雜增度,插入的時候只需要關(guān)注主鍵索引的數(shù)據(jù)就行。
【Mysql】索引數(shù)據(jù)結(jié)構(gòu)深入研究(二),Mysql,mysql,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)庫

聯(lián)合索引

【Mysql】索引數(shù)據(jù)結(jié)構(gòu)深入研究(二),Mysql,mysql,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)庫
如上圖,我們建立 name、age、position 的主鍵聯(lián)合索引。

聯(lián)合索引的數(shù)據(jù)結(jié)構(gòu)是有順序的,比如它先比較name的值,name的值相同在比較age,age相同在比較postion,可以仔細觀察一下上述的圖體會一下,然后在索引命中的時候是遵循最左前綴匹配的比如:

select * from table where name ='Bill';
select * from table where age = 30 and position='dev';
select * from table where position = 'dev';

比如上述Sql,只有第一個會命中索引,在或者如下sql

select * from table where age = 30 and position='dev' and name = 'Bill';

這個sql是可以進行索引查詢的,因為這種條件的情況下Mysql內(nèi)部會進行優(yōu)化。文章來源地址http://www.zghlxwxcb.cn/news/detail-521131.html

到了這里,關(guān)于【Mysql】索引數(shù)據(jù)結(jié)構(gòu)深入研究(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • MySQL-06.索引的數(shù)據(jù)結(jié)構(gòu)

    MySQL-06.索引的數(shù)據(jù)結(jié)構(gòu)

    索引是存儲引擎用于快速找到數(shù)據(jù)記錄的一種數(shù)據(jù)結(jié)構(gòu),就好比一本書的目錄部分,通過目錄中找到對應(yīng)文章的頁碼,便可快速定位到需要的文章。MySQL中的索引也是一樣的道理,進行數(shù)據(jù)查找時,首先查看查詢條件是否命中某條索引,符合則 通過索引查找 相關(guān)數(shù)據(jù),如果不

    2024年04月22日
    瀏覽(17)
  • 索引的數(shù)據(jù)結(jié)構(gòu)(MySql高級)

    索引的數(shù)據(jù)結(jié)構(gòu)(MySql高級)

    索引是存儲引擎用于快速找到數(shù)據(jù)記錄的一種數(shù)據(jù)結(jié)構(gòu),就好比一本教科書的目錄部分,通過目錄中找到對應(yīng)文章的頁碼,便可快速定位到需要的文章. MySQL中也是一樣的道理,進行數(shù)據(jù)查找時,首先查看查詢條件是否命中某條索引,符合則通過索引查找相關(guān)數(shù)據(jù),如果不符合

    2024年01月18日
    瀏覽(22)
  • MySQL數(shù)據(jù)庫索引的數(shù)據(jù)結(jié)構(gòu)

    數(shù)據(jù)庫索引的功能就是讓查找更加的高效,所以索引的數(shù)據(jù)結(jié)構(gòu)應(yīng)該是能夠加速查找的數(shù)據(jù)結(jié)構(gòu)。 MySQL的innoDB存儲引擎的索引的數(shù)據(jù)結(jié)構(gòu)就是多叉搜索樹中的b+樹,這可以說是為索引量身定做的一個數(shù)據(jù)結(jié)構(gòu)。 首先,索引可以通過主鍵,unique修飾創(chuàng)建,也可以直接使用sql語句

    2024年02月10日
    瀏覽(31)
  • 數(shù)據(jù)結(jié)構(gòu):Mysql索引原理(通俗易懂)

    數(shù)據(jù)結(jié)構(gòu):Mysql索引原理(通俗易懂)

    在工作中如果經(jīng)常寫業(yè)務(wù)代碼,說白了就是CURD,比如做一個查詢功能,我們會將前端參數(shù)傳遞到后端后拼接SQL查詢數(shù)據(jù),那為了提高用戶體驗,查詢速度肯定是越快越好,這就要求我們能夠?qū)QL調(diào)優(yōu),讓查詢速度更快。 由于數(shù)據(jù)需要持久化,且數(shù)據(jù)量龐大,所以只能將數(shù)據(jù)

    2024年02月11日
    瀏覽(22)
  • mysql索引的數(shù)據(jù)結(jié)構(gòu)(Innodb)

    mysql索引的數(shù)據(jù)結(jié)構(gòu)(Innodb)

    首選要注意,這里的數(shù)據(jù)結(jié)構(gòu)是存儲在硬盤上的數(shù)據(jù)結(jié)構(gòu),不是內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),要重點考慮io次數(shù). 一.不適合的數(shù)據(jù)結(jié)構(gòu): 1.Hash:不適合進行范圍查詢和模糊匹配查詢.(有些數(shù)據(jù)庫索引會使用Hash,但是只能精準匹配) 2.紅黑樹:可以范圍查詢和模糊匹配,但是和硬盤io次數(shù)比較多. 二

    2024年02月10日
    瀏覽(21)
  • MySQL基礎(chǔ)(二十四)索引的數(shù)據(jù)結(jié)構(gòu)

    MySQL基礎(chǔ)(二十四)索引的數(shù)據(jù)結(jié)構(gòu)

    順序查詢和數(shù)據(jù)使用二叉樹結(jié)構(gòu)再進行查詢,如圖: 2.1 索引概述 MySQL官方對索引的定義為: 索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu) 。 **索引的本質(zhì):**索引是數(shù)據(jù)結(jié)構(gòu)。你可以簡單理解為“排好序的快速查找數(shù)據(jù)結(jié)構(gòu)”,滿足特定查找算法。這些數(shù)據(jù)結(jié)構(gòu)以某種方

    2024年02月03日
    瀏覽(40)
  • 【MySQL數(shù)據(jù)庫 | 第十七篇】索引以及索引結(jié)構(gòu)介紹

    【MySQL數(shù)據(jù)庫 | 第十七篇】索引以及索引結(jié)構(gòu)介紹

    目錄 前言: 索引簡介:? 索引結(jié)構(gòu): ? ? ? ? ??二叉樹索引結(jié)構(gòu) ? ? ? ??Tree(普通二叉樹) ? ? ? ??B-Tree(多路平衡查找樹) ? ? ? ??B+Tree ? ? ? ???哈希索引數(shù)據(jù)結(jié)構(gòu) 總結(jié): 在實際生活中,我們對SQL語句進行優(yōu)化實際上有很大一部分都是對索引進行優(yōu)化,因此對索引

    2024年02月09日
    瀏覽(40)
  • MySQL學(xué)習(xí)Day19——索引的數(shù)據(jù)結(jié)構(gòu)

    MySQL學(xué)習(xí)Day19——索引的數(shù)據(jù)結(jié)構(gòu)

    一、為什么使用索引: 索引是存儲引擎用于快速找到數(shù)據(jù)記錄的一種數(shù)據(jù)結(jié)構(gòu),就好比一本教課書的目錄部分,通過目錄中找到對應(yīng)文章的頁碼,便可快速定位到需要的文章。MySQL中也是一樣的道理,進行數(shù)據(jù)査找時,首先查看查詢條件是否命中某條索引,符合則通過索引査找

    2024年02月21日
    瀏覽(26)
  • MySQL的索引使用的數(shù)據(jù)結(jié)構(gòu),事務(wù)知識

    MySQL的索引使用的數(shù)據(jù)結(jié)構(gòu),事務(wù)知識

    一、索引的數(shù)據(jù)結(jié)構(gòu) ?? 索引的數(shù)據(jù)結(jié)構(gòu)(非常重要) mysql的索引的數(shù)據(jù)結(jié)構(gòu),并非定式?。?!取決于MySQL使用哪個存儲引擎 數(shù)據(jù)庫這塊組織數(shù)據(jù)使用的數(shù)據(jù)結(jié)構(gòu)是在硬盤上的。我們平時寫的代碼是存在內(nèi)存里面,內(nèi)存里面的數(shù)據(jù)結(jié)構(gòu),對于訪問操作不敏感,(找數(shù)據(jù)的過程

    2024年02月10日
    瀏覽(23)
  • MySQL 底層數(shù)據(jù)結(jié)構(gòu) 聚簇索引以及二級索引 Explain的使用

    MySQL 底層數(shù)據(jù)結(jié)構(gòu) 聚簇索引以及二級索引 Explain的使用

    我們知道MySQL的存儲引擎Innodb默認底層是使用B+樹的變種來存儲數(shù)據(jù)的 下面我們來復(fù)習(xí)一下B樹存儲 + B樹存儲? + 哈希存儲的區(qū)別 哈希存儲,只能使用等值查詢 B樹與B+樹存儲 我們知道B+樹實際上就是B樹的變種 那么為啥使用B+樹而不是使用B樹呢? 我們知道效率的高低主要取決于

    2024年04月28日
    瀏覽(36)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包