精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

剖析MySQL InnoDB存儲(chǔ)原理(上)

jf_78858299 ? 來(lái)源:老李說(shuō)架構(gòu)之道 ? 作者:夢(mèng)海飛翔 ? 2023-02-15 15:45 ? 次閱讀

一、MySQL記錄的存儲(chǔ)結(jié)構(gòu):

1、Page的結(jié)構(gòu),如下圖:

圖片

1.1 頁(yè)頭

記錄頁(yè)面的控制信息,共占56字節(jié),包括頁(yè)的左右兄弟頁(yè)面指針、頁(yè)面空間使用情況等。

1.2 虛記錄

最大虛記錄:比頁(yè)內(nèi)最大主鍵還大

最小虛記錄:比頁(yè)內(nèi)最小主鍵還小

1.3 記錄堆

行記錄存儲(chǔ)區(qū),分為有效記錄和已刪除記錄

1.4 自由空間鏈表

已刪除記錄組成的鏈表

1.5 未分配空間

頁(yè)面未使用的存儲(chǔ)空間;

2、Page頁(yè)內(nèi)記錄的維護(hù)

2.1 順序保證

邏輯連續(xù),如圖所示:

圖片

2.2 插入策略

為了提高內(nèi)存的利用率,減少內(nèi)存碎片化空洞,首先從自由空間鏈表中分配(已刪除的記錄鏈表),如果空間不夠再?gòu)奈捶峙淇臻g分配;

2.3 頁(yè)內(nèi)查詢

二分查找,首先從物理連續(xù)的solt(0~n)中查找所在的solt位,然后再?gòu)膒age邏輯鏈表中找到所對(duì)應(yīng)的記錄;如圖所示;

圖片

3、Page頁(yè)內(nèi)數(shù)據(jù)特性

3.1 PageSize的固定大小為16KB

3.2 每頁(yè)至少兩天記錄,單行最大為8KB

3.3 最多存儲(chǔ)10個(gè)大字段

數(shù)據(jù)段最大768 ->(768+20)*10<8K

超出部分存儲(chǔ)在溢出頁(yè)

3.4 VARCHAR

1或2個(gè)字節(jié)描述字符長(zhǎng)度;

實(shí)際內(nèi)容存儲(chǔ)在長(zhǎng)度字節(jié)之后;

VARCHAR(255) [一個(gè)字節(jié)]+內(nèi)容

VARCHAR(256) [兩個(gè)字節(jié)]+內(nèi)容

二、 InnoDB索引原理和優(yōu)化

1、索引的原理分析

1.1 聚簇索引

數(shù)據(jù)存儲(chǔ)在主鍵索引中,數(shù)據(jù)按主鍵順序存儲(chǔ),如圖所示:

圖片

1.2 二級(jí)索引

除主鍵索引以外的索引,葉子中存儲(chǔ)主鍵值

一次查詢需要走兩遍查詢

主鍵大小會(huì)影響所有索引的大小,如圖所示:

圖片

1.3 聯(lián)合索引

Key由多個(gè)字段組成,最左匹配原則

一個(gè)索引只創(chuàng)建一棵樹(shù)按第一列排序

第一列相同按第二列排序

注意 :如果不是按照最左開(kāi)始查找,無(wú)法使用索引,不能跳過(guò)中間列,某列使用范圍查詢后面的列不能使用索引。

2、索引的優(yōu)化分析

2.1 存儲(chǔ)空間

索引文件大小是由字段大小、頁(yè)內(nèi)節(jié)點(diǎn)數(shù)目、樹(shù)的層數(shù)

2.2 主鍵的選擇

自增主鍵,順序?qū)懭耄矢?/p>

隨機(jī)主鍵,結(jié)點(diǎn)分裂、數(shù)據(jù)移動(dòng)

自增主鍵寫入磁盤利用率高,每次查詢走兩級(jí)索引

隨機(jī)主鍵寫入磁盤利用率低,每次查詢走兩級(jí)索引

業(yè)務(wù)主鍵:寫入查詢磁盤利用率都高,可以使用一級(jí)索引

聯(lián)合主鍵:影響索引大小,不易維護(hù),不建議使用

2.3 聯(lián)合主鍵

按索引區(qū)分度排序,并且覆蓋索引;

2.4 字符串索引

字符是按照字節(jié)對(duì)比的,設(shè)置的時(shí)候注意控制長(zhǎng)度;

不支持開(kāi)頭的%模糊查詢,只能全表掃描;

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4263

    瀏覽量

    85671
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    802

    瀏覽量

    26444
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    深度剖析MySQL/InnoDB的并發(fā)控制和加鎖技術(shù)

    本文主要是針對(duì)MySQL/InnoDB的并發(fā)控制和加鎖技術(shù)做一個(gè)比較深入的剖析,并且對(duì)其中涉及到的重要的概念,如多版本并發(fā)控制(MVCC),臟讀(dirty read),幻讀(phantom
    的頭像 發(fā)表于 10-29 14:36 ?2122次閱讀
    深度<b class='flag-5'>剖析</b><b class='flag-5'>MySQL</b>/<b class='flag-5'>InnoDB</b>的并發(fā)控制和加鎖技術(shù)

    詳解Mysql數(shù)據(jù)庫(kù)InnoDB存儲(chǔ)引擎事務(wù)

    關(guān)于Mysql數(shù)據(jù)庫(kù)InnoDB存儲(chǔ)引擎事務(wù)的一點(diǎn)理解
    發(fā)表于 05-13 10:11

    InnoDB鎖的特點(diǎn)和狀態(tài)查詢

    MySQL探秘(五)InnoDB鎖的類型和狀態(tài)查詢
    發(fā)表于 08-07 11:45

    分布式MySQLInnoDB cluster

    分布式MySQL——InnoDB cluster和性能測(cè)試
    發(fā)表于 04-15 08:43

    MySQL存儲(chǔ)引擎簡(jiǎn)析

    MySQL存儲(chǔ)引擎InnoDB??InnoDB存儲(chǔ)文件有兩個(gè),后綴名分別是.frm和.idb,其中.frm是表的定義文件,而.idb是數(shù)
    發(fā)表于 09-06 06:07

    MySQL存儲(chǔ)引擎中MyISAM與InnoDB優(yōu)劣勢(shì)比較分析

    使用MySQL當(dāng)然會(huì)接觸到MySQL存儲(chǔ)引擎,在新建數(shù)據(jù)庫(kù)和新建數(shù)據(jù)表的時(shí)候都會(huì)看到。
    的頭像 發(fā)表于 07-18 16:00 ?2677次閱讀
    <b class='flag-5'>MySQL</b><b class='flag-5'>存儲(chǔ)</b>引擎中MyISAM與<b class='flag-5'>InnoDB</b>優(yōu)劣勢(shì)比較分析

    關(guān)于mysql存儲(chǔ)引擎你知道多少

    Mysql中用的最多的兩種存儲(chǔ)引擎就是MyISAM和InnDB,其中MyISAM是5.1版本之前的默認(rèn)存儲(chǔ)引擎,InnoDB是5.1版本之后的默認(rèn)
    發(fā)表于 08-23 10:52 ?843次閱讀

    最有用的mysql問(wèn)答

    、壓縮、空間函數(shù)等,但是不支持事務(wù)和行級(jí)鎖,所以一般用于有大量查詢少量插入的場(chǎng)景來(lái)使用,而且myisam不支持外鍵,并且索引和數(shù)據(jù)是分開(kāi)存儲(chǔ)的。 innodb是基于聚簇索引建立的,和myisam相反它支持事務(wù)、外鍵,并且通過(guò)MVCC來(lái)支持高并發(fā),索引和數(shù)據(jù)
    的頭像 發(fā)表于 09-30 17:43 ?1676次閱讀
    最有用的<b class='flag-5'>mysql</b>問(wèn)答

    MySQL存儲(chǔ)引擎完成更新語(yǔ)句執(zhí)行的方法

    首先肯定是我們的系統(tǒng)通過(guò)一個(gè)數(shù)據(jù)庫(kù)連接發(fā)送到了MySQL,然后肯定會(huì)經(jīng)過(guò)SQL接口、解析器、優(yōu)化器、執(zhí)行器幾個(gè)環(huán)節(jié),解析SQL語(yǔ)句,生成執(zhí)行計(jì)劃,接著去由執(zhí)行器負(fù)責(zé)這個(gè)計(jì)劃的執(zhí)行,調(diào)用InnoDB
    的頭像 發(fā)表于 10-21 10:40 ?2026次閱讀
    <b class='flag-5'>MySQL</b><b class='flag-5'>存儲(chǔ)</b>引擎完成更新語(yǔ)句執(zhí)行的方法

    關(guān)于InnoDB的內(nèi)存結(jié)構(gòu)及原理詳解

    除此之外還聊了一下MySQLInnoDB的日志,和兩次寫,總的來(lái)說(shuō)算是一個(gè)入門級(jí)別的介紹,這篇文章就來(lái)詳細(xì)介紹一下InnoDB的內(nèi)存結(jié)構(gòu)。
    的頭像 發(fā)表于 04-16 16:15 ?2751次閱讀
    關(guān)于<b class='flag-5'>InnoDB</b>的內(nèi)存結(jié)構(gòu)及原理詳解

    MySQL中的redo log是什么

    時(shí),InnoDB存儲(chǔ)引擎會(huì)使用redo log恢復(fù)數(shù)據(jù),保證數(shù)據(jù)的持久性與完整性。 一篇中阿星講過(guò),MySQL中數(shù)據(jù)是以頁(yè)為單位,你查詢一條
    的頭像 發(fā)表于 09-14 09:40 ?2003次閱讀

    innodb究竟是如何存數(shù)據(jù)的

    前言如果你使用過(guò)mysql數(shù)據(jù)庫(kù),對(duì)它的存儲(chǔ)引擎:innodb,一定不會(huì)感到陌生。 眾所周知,在mysql5以前,默認(rèn)的存儲(chǔ)引擎是:mysl
    的頭像 發(fā)表于 10-09 15:41 ?1315次閱讀
    <b class='flag-5'>innodb</b>究竟是如何存數(shù)據(jù)的

    MySQL5.6 InnoDB支持全文檢索

    在早期的 MySQL 中,InnoDB 并不支持全文檢索技術(shù),從 MySQL 5.6 開(kāi)始,InnoDB 開(kāi)始支持全文檢索。
    的頭像 發(fā)表于 11-12 15:14 ?1355次閱讀

    剖析MySQL InnoDB存儲(chǔ)原理(下)

    一、InnoDB存儲(chǔ)引擎內(nèi)存管理 1.1 概念: Buffer Pool:預(yù)分配的內(nèi)存池; Page:Buffer Pool的最小單位; Free list:空閑Page組成的鏈表;
    的頭像 發(fā)表于 02-15 15:47 ?390次閱讀
    <b class='flag-5'>剖析</b><b class='flag-5'>MySQL</b> <b class='flag-5'>InnoDB</b><b class='flag-5'>存儲(chǔ)</b>原理(下)

    MySQL中的InnoDB是什么?

    有許多強(qiáng)大的MySQL存儲(chǔ)引擎可供我們使用,而InnoDB無(wú)疑是最受歡迎的存儲(chǔ)引擎之一。它高度可靠和高效,因此它成為5.5版本以后所有MySQL
    的頭像 發(fā)表于 04-13 09:09 ?710次閱讀