InnoDB基礎

来源:https://www.cnblogs.com/codelv/archive/2020/03/29/12297588.html
-Advertisement-
Play Games

在InnoDB中,數據存儲在磁碟上,處理數據時需要先將數據從磁碟讀取,再寫到記憶體。InnoDB採用局部性原理載入。 一、局部性原理 從磁碟讀取數據時,不需要一行一行讀取,而是以頁為單位讀取,操作系統中一頁4kb,InnoDB中一頁16kb。 二、InnoDB頁結構 頁是InnoDB管理存儲空間的基本 ...


  在InnoDB中,數據存儲在磁碟上,處理數據時需要先將數據從磁碟讀取,再寫到記憶體。InnoDB採用局部性原理載入。

一、局部性原理   從磁碟讀取數據時,不需要一行一行讀取,而是以頁為單位讀取,操作系統中一頁4kb,InnoDB中一頁16kb。   二、InnoDB頁結構   頁是InnoDB管理存儲空間的基本單位,一個頁的大小預設是16KB。

三、InnoDB行格式

  一行記錄可以以不同的格式存在InnoDB中,行格式分別是Compact、Redundant、Dynamic和Compressed行格式。

  我們可以在創建或修改表的語句中指定行格式:

    CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名稱     ALTER TABLE 表名 ROW_FORMAT=行格式名稱

1、Compact行格

   

    (1)變長欄位長度列表

  MySQL支持一些變長的數據類型,比如VARCHAR(M)、VARBINARY(M)、TEXT類型,BLOB類型,這些數據類型修飾列稱為變長欄位。變長欄位長度列表即所有變長欄位的真實數據占用的位元組長度構成的列表。

  VARCHAR(M),M代表最大能存多少個字元。

  (2)NULL標誌位(列表)   Compact行格式會把可以值為NULL的列統一管理起來,存一個二進位標記(1為NULL,0不為NULL)在NULL標誌位中,如果表中沒有允許存儲 NULL 的列,則 NULL值列表也不存在了。 

   如:第一行沒有null:11111

    第二行前三位null:22 (null標誌位:11100)

  (3)記錄頭信息

    記錄頭信息用於描述記錄,它是由固定的5個位元組組成。 5個位元組也就是40個二進位位,不同的位代表不同的意思,如圖: 

    

  (4)記錄的真實數據 

    記錄的真實數據除了我們自己定義的列的數據以外,還會有三個隱藏列:

    

2.行溢出數據

 VARCHAR(M)類型的列最多可以占用65535個位元組。 如果我們使用 ascii字元集的話,一個字元就代表一個位元組。但是VARCHAR(65535)會報錯:  

  

 

  原因:存儲一個VARCHAR(M)類型的列,其實需要占用3部分存儲空間: 1. 真實數據 2. 變長欄位真實數據的長度 3. NULL值標識 

  因此,如果該VARCHAR類型的列沒有NOT NULL屬性,那最多只能存儲65532個位元組的數據,因為變長欄位的長度占用 2個位元組,NULL值標識需要占用1個位元組。 

 3.行過長導致的頁溢出

  一個頁的大小一般是16KB,也就是16384位元組,而一個VARCHAR(M)類型的列就最多可以存儲65533個位元組,這 樣就可能出現一個頁存放不了一條記錄。 

   (1)在Compact和Reduntant行格式中,對於占用存儲空間非常大的列,在記錄的真實數據處只會存儲該列的一部分 數據,把剩餘的數據分散存儲在幾個其他的頁中,然後記錄的真實數據處用20個位元組存儲指向這些頁的「地址和位元組數」,從而可以找到剩餘數據所在的頁。 

     ...

 

  (2)在Dynamic和Compressed行格式中,它們不會在記錄的真實數據處 存儲一部分數據,而是把所有的數據都存儲到其他頁面中,只在記錄的真實數據處存儲其他頁面的地址。

     ...

4.Dynamic和Compressed行格式

  這兩種行格式類似於COMPACT行格式,只不過在處理行溢出數據時有點區別,如上。另外, Compressed行格式會採用壓縮演算法對頁面進行壓縮。 

 

 

 

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 前言 nuget 是 .net 的常用包管理器,目前已經內置到 Visual Studio 2012 以後的版本。大多數 .net 包都托管在 nuget.org,包括 .net core 框架基礎包,得益於 .net core 的模塊化設計,很多非核心包都可以進行一定程度的獨立升級。 製作並上傳 ...
  • 前言:由於公司占時沒有運維,出於微服務的需要,Apollo只能先裝在windows 阿裡雲上跑起來,由於環境及網路等問題,在安裝過程中遇到很多坑,算是一個個坑填完後,最終實現。 一. java jdk環境 java jdk 1.8下載地址: https://www.oracle.com/java/t ...
  • 本文只對api介面,header請求參數進行簡單驗證,起到拋磚引玉使用,需要深入驗證,請自行擴展 項目目錄結構如圖 中間件類 using ApiMiddleware.Common.DataEnityModel; using ApiMiddleware.Common.DbContext; using ...
  • 一、引言 按照專用隊列解釋: MachineName\Private$\QueueName,只針對於本機的程式才可以調用的隊列,有些情況下為了安全起見定義為私有隊列。所以剛開始的時候認為,要想訪問遠程消息隊列,只能使用公共隊列。但是後來發現,公共隊列依賴Domain Controller(域控),在 ...
  • 一、打開CMD方式 點擊開始,找到windows系統展開,選擇命令提示符 win鍵+R鍵,在打開的彈框中輸入cmd,點擊確認 選中文件夾,按住shift鍵,點擊滑鼠右鍵,選擇在此處打開Powershell視窗 在資源管理器的地址欄上輸入cmd或者在地址前面加上cmd,按回車鍵 二、常用的DOS命令 ...
  • 段、頁結合:程式員希望用段,物理記憶體希望用頁,所以、、、 從虛擬記憶體中割出一個區域來給這個段,段就有了映射,但是這個虛擬記憶體不能正真的使用,需要把虛擬記憶體再映射一次,這個時候虛擬記憶體中的段分割成固定大小的頁,每一頁再去映射到物理記憶體中 1. 段、頁同時存在 段面向用戶,頁面向硬體 2. 段頁同時存在 ...
  • 1.下載CentOS CentOS下載地址: "https://wiki.centos.org/Download" 這裡選擇本地安裝包,網路安裝包在安裝時需要線上下載資源比較慢 2.安裝VirtualBox VirtualBox是Oracle旗下免費的輕量級虛擬機 VirtualBox下載地址: " ...
  • 我們在使用bash命令時,會經常使用二次tab鍵進行補齊。 例如我們常用的telnet命令,在輸入二次tab鍵時,會列出當前系統配置的所有主機名,供選擇 # 輸入 telnet <Tab> <Tab> [huangcihui:/home/huangcihui] telnet ::1 localhos ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...