欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL進階之索引

 更新時間:2023年04月09日 15:54:31   作者:兜兜轉(zhuǎn)轉(zhuǎn)m  
索引就是一種數(shù)據(jù)結(jié)構(gòu),這種結(jié)構(gòu)類似,鏈表,樹等等。但是比它們要復(fù)雜的多,索引(index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)(有序),本文詳細介紹了MySQL索引,感興趣的同學(xué)可以參考閱讀

索引概述

介紹

索引(index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)(有序)。在數(shù)據(jù)之外,數(shù)據(jù)庫系統(tǒng)還維護著滿足 特定查找算法的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)以某種方式引用(指向)數(shù)據(jù), 這樣就可以在這些數(shù)據(jù)結(jié)構(gòu) 上實現(xiàn)高級查找算法,這種數(shù)據(jù)結(jié)構(gòu)就是索引。

索引就是一種數(shù)據(jù)結(jié)構(gòu),這種結(jié)構(gòu)類似,鏈表,樹等等。但是比它們要復(fù)雜的多。

為什么要用索引呢?

假如我們有如下數(shù)據(jù)

如果我們要查詢年齡=45的全部信息。

select * from tb_user where age = 45;

那么SQL是如何查詢呢?

MySQL需要進行全表掃描,然后對比每條數(shù)據(jù)中的age值是否是45。

加入我們要100個數(shù)據(jù),那你繼續(xù)全表掃描找出age = 45;豈不是太麻煩了?

這是你是否想起來數(shù)據(jù)結(jié)構(gòu)中二叉搜索樹?我們將age的值映射到這個二叉搜索樹上,那么我們就可以快速查找到我們要的結(jié)果。age 到二叉搜索樹的過程就是索引。

注意:我們僅僅用二叉搜索樹舉例子,想信你肯定知道MySQL中的索引肯定比這個復(fù)雜。

此時我們對索引的理解更加深入了,索引僅僅是建立了一個數(shù)據(jù)結(jié)構(gòu),把數(shù)據(jù)存入到這個結(jié)構(gòu)上,方便MySQL查找數(shù)據(jù)罷了。

特點

索引結(jié)構(gòu)

MySQL的索引是在存儲引擎層實現(xiàn)的,不同的存儲引擎有不同的索引結(jié)構(gòu),主要包含以下幾種

上述是MySQL中所支持的所有的索引結(jié)構(gòu),接下來,我們再來看看不同的存儲引擎對于索引結(jié)構(gòu)的支持 情況。

我們主要看InnoDB就可以了,因為MyISAM會被MongoDB代替,Memory會被Redis代替。

我們一般指的索引是指的是B+tree。

當(dāng)然B+tree肯定不是一上來就提出來的,肯定是有一個進化的過程。

索引進化的過程

我們都知道二叉搜索樹是一個方便存儲的結(jié)構(gòu),因為其天然的排序。左子樹都小于中間節(jié)點,右子樹都大于中間節(jié)點。

但是它有什么缺點呢?在極端情況下會退化成鏈表。查找時間復(fù)雜度O(n),這不就等效于全表查詢了?

如何克服呢?使用紅黑樹,因為它是一種平衡二叉樹??梢员苊獬霈F(xiàn)鏈表這種極端情況。

那么是不是使用紅黑樹就可以了?答案:還是不行,不夠理想。

為什么呢?因為是二叉樹,如果MySQL中數(shù)據(jù)過多,那么將會出現(xiàn)樹的層級過深。

我們知道數(shù)據(jù)以Page為單位存入的,在Page切換查詢時會出現(xiàn)磁盤IO操作。層級過深就會造成IO頻繁。

如何解決上述問題呢?B-Tree出場。

B-Tree

B-Tree,B樹是一種多叉路衡查找樹,相對于二叉樹,B樹每個節(jié)點可以有多個分支,即多叉。 以一顆最大度數(shù)(max-degree)為5(5階)的b-tree為例,那這個B樹每個節(jié)點最多存儲4個key(每個key都可以存放數(shù)據(jù)),5 個指針:

是不是使用b樹就可以了呢?原則上是可以了,但是還有一種更優(yōu)的方案B+Tree 代替了BTree。

MySQL中的B+Tree 和BTree有什么不同呢?

  • B+Tree只在葉子節(jié)點存儲數(shù)據(jù),從而保證每個Page中存入更多的key。
  • 葉子節(jié)點包含了根節(jié)點和非葉子節(jié)點--圖中紅框顯示。
  • 葉子節(jié)點采用雙向循環(huán)鏈表連接,方便查找。

 因此我們可以回答:為什么MySQL采用B+Tree呢?

到此這篇關(guān)于MySQL進階之索引的文章就介紹到這了,更多相關(guān)MySQL索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mysql中count(*)、count(1)、count(主鍵id)與count(字段)的區(qū)別

    Mysql中count(*)、count(1)、count(主鍵id)與count(字段)的區(qū)別

    本文主要介紹了Mysql中count(*)、count(1)、count(主鍵id)與count(字段)的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 淺談MySQL中的group by

    淺談MySQL中的group by

    這篇文章主要介紹了MySQL中的group by,MySQL的group by用于對查詢的數(shù)據(jù)進行分組;此外MySQL提供having子句對分組內(nèi)的數(shù)據(jù)進行過濾。下面來看看文章對此的具體介紹,需要的朋友可以參考一下,希望對你有所幫助
    2021-11-11
  • MySQL易學(xué)易用之MYSQL不為人知的特性

    MySQL易學(xué)易用之MYSQL不為人知的特性

    MySQL易學(xué)易用,且附帶豐富的技術(shù)文檔,這二個因素使之被廣泛應(yīng)用。然而,隨著MySQL發(fā)展之迅速,即使一個MySQL老手有時也會為該軟件出其不意的功能感嘆。
    2011-01-01
  • MYSQL如何查看進程和kill進程

    MYSQL如何查看進程和kill進程

    這篇文章主要介紹了MYSQL如何查看進程和kill進程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • MySQL的root密碼忘記怎么辦 修改root密碼的方式

    MySQL的root密碼忘記怎么辦 修改root密碼的方式

    MySQL數(shù)據(jù)庫的root密碼忘記,怎么辦?修改root密碼的三種方式你知道嗎?下面就為大家提供詳細的解決方案,需要的朋友可以參考下
    2016-04-04
  • MySQL使用聚合函數(shù)進行單表查詢

    MySQL使用聚合函數(shù)進行單表查詢

    這篇文章主要介紹了MySQL使用聚合函數(shù)進行單表查詢,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • mysql 數(shù)據(jù)表中查找重復(fù)記錄

    mysql 數(shù)據(jù)表中查找重復(fù)記錄

    以下sql語句可以實現(xiàn)查找出一個表中的所有重復(fù)的記錄
    2009-07-07
  • MySQL 從全庫備份中恢復(fù)指定的表和庫示例

    MySQL 從全庫備份中恢復(fù)指定的表和庫示例

    這篇文章主要介紹了MySQL 從全庫備份中恢復(fù)指定的表和庫示例的相關(guān)資料,這里提供了相應(yīng)的方法,來實現(xiàn)恢復(fù)指定的表和庫數(shù)據(jù),需要的朋友可以參考下
    2016-11-11
  • MySQL8.0.20單機多實例部署步驟

    MySQL8.0.20單機多實例部署步驟

    本文主要介紹了MySQL8.0.20單機多實例部署步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Linux中更改轉(zhuǎn)移mysql數(shù)據(jù)庫目錄的步驟

    Linux中更改轉(zhuǎn)移mysql數(shù)據(jù)庫目錄的步驟

    前幾天發(fā)現(xiàn)由于MySQL的數(shù)據(jù)庫太大,默認安裝的/var盤已經(jīng)再也無法容納新增加的數(shù)據(jù),只能想辦法轉(zhuǎn)移數(shù)據(jù)的目錄。網(wǎng)上有很多相關(guān)的文章寫到轉(zhuǎn)移數(shù)據(jù)庫目錄的文章,但轉(zhuǎn)載的過程中還會有一些錯誤,因為大部分人根本就沒測試過,這篇文章是本文測試過整理好后分享給大家。
    2016-11-11

最新評論