最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql簡易索引方案講解

 更新時間:2022年05月31日 09:46:19   作者:把蘋果咬哭的測試筆記  
這篇文章主要為大家介紹了Mysql索引如何實現(xiàn)更加簡易的查找方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Mysql簡易索引

一、沒有索引的時候如何查找

先忽略掉索引這個概念,如果現(xiàn)在直接要查某條記錄,要如何查找呢?

在一個頁中查找

如果表中的記錄很少,一個頁就夠放,那么這時候有 2 種情況:

  • 用主鍵為搜索條件:這時就是之前文章提過的方式,頁面目錄中用二分法快速定位到槽,然后遍歷該槽對應(yīng)分組的記錄,最終找到指定記錄。
  • 用其他非主鍵的列為搜索條件:因為數(shù)據(jù)頁中沒有為非主鍵列建立頁目錄,無法通過二分法快速定位槽,只能從 Infimum 記錄開始一次遍歷單鏈表的每條記錄,效率低下。

在很多頁中查找

當(dāng)表中的記錄非常多,就會用到很多的數(shù)據(jù)頁來存儲,這時候需要 2 個步驟:

  • 定位到記錄所在頁。
  • 重復(fù)上述在一個頁中查找的過程。

總得來說,當(dāng)沒有索引,我們無法快速定位到記錄所在頁,只能從第一頁沿著雙向鏈表(頁有前一頁和后一頁)一直找下去,然后在每一頁中重復(fù)上述的過程查詢指定的記錄,需要遍歷所有記錄,這種方式非常耗時。

二、一個簡易索引

既然是因為頁數(shù)太多導(dǎo)致定位記錄太慢,那如何解決呢?不妨參考一下“頁目錄”。

頁目錄就是為了根據(jù)主鍵快速定位一條記錄在頁中的位置而設(shè)置的。那么我們也可以想辦法為快速定位記錄所在的頁,搞一個“別的目錄”。

但是這個“別的目錄”要想完成還得干好 2 件事。

1. 下一頁用戶記錄的主鍵值必須大于上一頁的

假設(shè),每個數(shù)據(jù)頁最多可以放 3 條記錄(實際上可以放很多),那么現(xiàn)在向表里插入 3 條記錄,每條記錄有3個列 c1、c2、c3。為了看著方便,存儲行格式也簡化下,只留關(guān)鍵屬性。注意中間3條是用戶記錄,首尾的2條是虛擬記錄 Infimum 和 Supremum。

此時,繼續(xù)插入 1 條記錄。按照假設(shè)的情況,現(xiàn)在需要多分配一個新的頁,所以 2 個頁之間就變成了這樣。

注意紅色字體顯示的2條記錄,本來主鍵 4 的記錄是新插入的,按理應(yīng)該放在新的頁。但是,為了滿足下一頁用戶記錄的主鍵值必須大于上一頁的用戶記錄主鍵值,做了諸如記錄移動的操作,這個過程也可以稱為“頁分裂”。

另外,為什么新頁是頁 28,而不是 11?因為頁在磁盤上可能并不挨著,它們只是通過維護(hù)上一頁和下一頁的編號而建立了鏈表關(guān)系。

2. 給所有的頁建立一個目錄項

現(xiàn)在繼續(xù)向表里增加數(shù)據(jù),最終多個頁的關(guān)系是這樣:

因為這些頁在磁盤上可能不挨著,所有想要快速從這么多頁中根據(jù)主鍵快速定位某記錄,就要給它們編制一個目錄。

每個頁對應(yīng)一個目錄項,每個目錄項包括:

  • 頁的用戶記錄中最小的主鍵值,用 key 來表示
  • 頁號,用 page_no 表示

所以,給它們編好目錄之后就是這樣的關(guān)系:

那么,現(xiàn)在我想查找主鍵值為 20 的記錄,具體就分兩步走:

先從目錄項中根據(jù)二分法快速確定出主鍵值為 20 的記錄所在目錄項 3 中,且對應(yīng)的頁為 9。知道是在頁 9,重復(fù)之前的方式,找到最終目標(biāo)記錄。

到此,一個簡易的方案完成。而完成的這個簡易目錄,它有個別名,叫做索引。

三、簡易索引暴露出的問題

上述的簡易索引是原書作者為了循序漸進(jìn)的幫助讀者理解而設(shè)置的內(nèi)容,這并不是innodb的索引方案。

那么針對上述的建議索引,看下有哪些問題。

問題一:

InnoDB 使用頁作為管理存儲空間的基本單位,也就是最多只能保存16kb的連續(xù)存儲。

當(dāng)表中記錄越來越多,此時就需要非常大的連續(xù)存儲空間才可以把所有的目錄項都裝下,這對大數(shù)據(jù)量的表來說不現(xiàn)實。

問題二:

我們經(jīng)常還要對記錄執(zhí)行增刪改操作,會牽一發(fā)而動全身。

比如,上圖中我如果把頁 28 中的記錄都刪除,那么頁 28 就沒必要存在,進(jìn)而目錄項 2 也沒必要存在。這時候就需要把目錄項 2 后的目錄項都向前移動一下。

就算不移動,把目錄項 2 作為冗余放在目錄項列表中,仍然會浪費(fèi)很多的存儲空間。

所以,InnoDB 的作者發(fā)現(xiàn)了一種靈活管理所有目錄項的方式,詳見下一篇。

本文參考書籍:《mysql是怎樣運(yùn)行的》

以上就是Mysql簡易索引方案講解的詳細(xì)內(nèi)容,更多關(guān)于Mysql簡易索引的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Can't connect to MySQL server on localhost (10061)解決方法

    Can't connect to MySQL server 

    今天在安裝mysql后使用mysql命令連接mysql時報錯?Can't connect to MySQL server on localhost (10061),一般是因為mysql服務(wù)沒有啟動或者用戶名密碼不正確
    2011-03-03
  • MySQL數(shù)據(jù)庫中Interval關(guān)鍵字的使用看這一篇就夠了

    MySQL數(shù)據(jù)庫中Interval關(guān)鍵字的使用看這一篇就夠了

    這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫中Interval關(guān)鍵字使用的相關(guān)資料,interval作為一個關(guān)鍵字時,表示為時間間隔,常用在date_add()、date_sub()、subdate(),函數(shù)中,常用于時間的加減法,需要的朋友可以參考下
    2024-08-08
  • Mysql數(shù)據(jù)庫中數(shù)字相減 出現(xiàn)負(fù)數(shù)時sql 語句報錯的問題

    Mysql數(shù)據(jù)庫中數(shù)字相減 出現(xiàn)負(fù)數(shù)時sql 語句報錯的問題

    這篇文章主要介紹了Mysql數(shù)據(jù)庫中數(shù)字相減 出現(xiàn)負(fù)數(shù)時sql 語句報錯的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • CentOS7.x?安裝mysql5.7?XtraBackUp備份工具使用命令詳解

    CentOS7.x?安裝mysql5.7?XtraBackUp備份工具使用命令詳解

    這篇文章主要介紹了CentOS7.x?安裝mysql5.7?XtraBackUp備份工具使用,本文給大家介紹了mysql安裝過程及命令使用方法,需要的朋友可以參考下
    2022-04-04
  • MYSQL隨機(jī)抽取查詢 MySQL Order By Rand()效率問題

    MYSQL隨機(jī)抽取查詢 MySQL Order By Rand()效率問題

    MYSQL隨機(jī)抽取查詢:MySQL Order By Rand()效率問題一直是開發(fā)人員的常見問題,俺們不是DBA,沒有那么牛B,所只能慢慢研究咯,最近由于項目問題,需要大概研究了一下MYSQL的隨機(jī)抽取實現(xiàn)方法
    2011-11-11
  • mysql8.0.11 winx64安裝配置方法圖文教程(win10)

    mysql8.0.11 winx64安裝配置方法圖文教程(win10)

    這篇文章主要為大家詳細(xì)介紹了win10下mysql8.0.11 winx64安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • MySQL與sqlyog安裝教程圖文詳解

    MySQL與sqlyog安裝教程圖文詳解

    這篇文章主要介紹了MySQL與sqlyog安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • MySQL EXPLAIN輸出列的詳細(xì)解釋

    MySQL EXPLAIN輸出列的詳細(xì)解釋

    這篇文章主要給大家介紹了關(guān)于MySQL EXPLAIN輸出列的詳細(xì)解釋,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • mysql優(yōu)化之like和=性能詳析

    mysql優(yōu)化之like和=性能詳析

    這篇文章主要給大家介紹了關(guān)于mysql優(yōu)化之like和=性能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • mysql 5.7.16 安裝配置方法圖文教程(ubuntu 16.04)

    mysql 5.7.16 安裝配置方法圖文教程(ubuntu 16.04)

    這篇文章主要為大家分享了ubuntu 16.04下mysql 5.7.16 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評論

类乌齐县| 黎城县| 阳原县| 平原县| 交城县| 广汉市| 鹿泉市| 孟津县| 嵩明县| 林口县| 南充市| 习水县| 尚志市| 长丰县| 怀远县| 江西省| 阳新县| 濮阳市| 平和县| 丹江口市| 石阡县| 溧阳市| 辽宁省| 龙州县| 玛多县| 浪卡子县| 化隆| 偏关县| 紫金县| 同江市| 台中市| 宝兴县| 五莲县| 阿拉善左旗| 永定县| 苍山县| 治多县| 邵阳市| 右玉县| 丹东市| 东安县|