MyISAM 和 InnoDB 索引結構及其實現原理

来源:https://www.cnblogs.com/laowenBlog/archive/2020/06/15/13130660.html
-Advertisement-
Play Games

資料庫索引,是資料庫管理系統中一個排序的數據結構,以協助快速查詢、更新資料庫表中數據。 索引的實現通常使用B_TREE。 B_TREE索引加速了數據訪問,因為存儲引擎不會再去掃描整張表得到需要的數據; 相反,它從根節點開始,根節點保存了子節點的指針,存儲引擎會根據指針快速尋找數據。 MyISAM引擎 ...


  1. 資料庫索引,是資料庫管理系統中一個排序的數據結構,以協助快速查詢、更新資料庫表中數據。

  2. 索引的實現通常使用B_TREE。
    B_TREE索引加速了數據訪問,因為存儲引擎不會再去掃描整張表得到需要的數據;
    相反,它從根節點開始,根節點保存了子節點的指針,存儲引擎會根據指針快速尋找數據。

  3. MyISAM引擎 使用B+Tree作為索引結構,葉節點的data域存放的是數據記錄的地址.
    即:MyISAM索引文件和數據文件是分離的,MyISAM的索引文件僅僅保存數據記錄的地址。
    MyISAM中索引檢索的演算法為首先按照B+Tree搜索演算法搜索索引,
    如果指定的Key存在,則取出其data域的值,然後以data域的值為地址,讀取相應數據記錄。
    MyISAM的索引方式也叫做“非聚集”的。
    物理文件結構為:
    .frm文件:與表相關的元數據信息都存放在frm文件,包括表結構的定義信息等。
    .myd(mysql data)文件:myisam存儲引擎專用,用於存儲myisam表的數據
    .myi(mysql index)文件:myisam存儲引擎專用,用於存儲myisam表的索引相關信息

  4. InnoDB引擎 也使用B+Tree作為索引結構,但是InnoDB的數據文件本身就是索引文件,葉節點data域保存了完整的數據記錄。
    這個索引的key是數據表的主鍵,因此InnoDB表數據文件本身就是主索引。這種索引叫做“聚焦索引”。
    InnoDB的輔助索引的data域存儲相應記錄主鍵的值而不是地址。
    換句話說,InnoDB的所有輔助索引都引用主鍵作為data域。
    聚集索引這種實現方式使得按主鍵的搜索十分高效,但是輔助索引搜索需要檢索兩遍索引:
    首先檢索輔助索引獲得主鍵,然後用主鍵到主索引中檢索獲得記錄。
    InnoDB的索引實現後,不建議使用過長的欄位作為主鍵,因為所有輔助索引都引用主索引,過長的主索引會令輔助索引變得過大。
    在InnoDB中也不建議使用非單調的欄位作為主鍵,
    因為InnoDB數據文件本身是一顆B+Tree,非單調的主鍵會造成在插入新記錄時數據文件為了維持B+Tree的特性而頻繁的分裂調整,十分低效,建議使用自增欄位作為主鍵。
    物理文件結構為:
    .frm與表相關的元數據信息都存放在frm文件,包括表結構的定義信息等。
    .ibd文件和.ibdata文件:
    這兩種文件都是存放innodb數據的文件,之所以用兩種文件來存放innodb的數據,是因為innodb的數據存儲方式能夠通過配置來決定是使用共用表空間存放存儲數據,還是用獨享表空間存放存儲數據。
    獨享表空間存儲方式使用.ibd文件,並且每個表一個ibd文件;
    共用表空間存儲方式使用.ibdata文件,所有表共同使用一個ibdata文件;
    覺得使用哪種方式的參數在mysql的配置文件中 innodb_file_per_table;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Docker鏡像加速配置;Docker鏡像常用操作;Dcoker容器常用操作。 ...
  • 1.首先上傳安裝包,這裡我以 redis-5.0.8.tar.gz 為例子。 Linux下載redis地址:wget http://download.redis.io/releases/redis-5.0.8.tar.gz 先在opt目錄下建立一個軟體包上傳文件夾 mkdir /opt/softwa ...
  • 我們在進行伺服器配置的時候,經常要查看伺服器的某個埠是否已經開放。如果伺服器只有一兩台的話,那很好辦,只需要使用 nc 命令一個個查看即可。 但是,如果你的伺服器是個集群,有很多台呢?那如果還一個個手動去檢查的話,效率肯定是無比低下的,年底裁員名單里肯定有你。 在這種情況下,我們完全可以使用 Sh ...
  • 實驗內容: 結合中斷上下文切換和進程上下文切換分析Linux內核一般執行過程 以fork和execve系統調用為例分析中斷上下文的切換 分析execve系統調用中斷上下文的特殊之處 分析fork子進程啟動執行時進程上下文的特殊之處 以系統調用作為特殊的中斷,結合中斷上下文切換和進程上下文切換分析Li ...
  • 在linux kernel里,有一個debug選項LOCKUP_DETECTOR。 使能它可以打開kernel中的soft lockup和hard lockup探測。 這兩個東西到底有什麼用處那? 首先,soft/hard lockup的實現在kernel/watchdog.c中, 主體涉及到了3個 ...
  • 學習Linux的註意事項(一) Linux嚴格區分大小寫 Linux是嚴格區分大小寫的,這一點和Windows不一樣,所以操作時要註意區分大小寫的不同,包括文件名和目錄名、命令、命令選項、配置文件配置選項等 Linux一切皆文件 Linux中所有內容都是以文件的形式保存和管理的,硬體設備也是文件,這 ...
  • 今天由於工作需要,需要把數據把列根據指定的內容拆分數據 其中一條數據實例 select id , XXXX FROM BIZ_PAPER where id ='4af210ec675927fa016772bf7dd025b0' 拆分方法: select t3.id ,t3.XXXX as XXXX ...
  • Elasticsearch管理中索引的管理非常重要。基於磁碟空間和性能的考量,索引的生命周期管理顯得尤為重要。Curator允許對索引創建、刪除等操作,下麵是我們藉助 elasticsearch-curator 插件來定期刪除index.本文主要介紹elasticsearch-curator 插件的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...