MySQL存储引擎InnoDB1

来源:MySQL技术内幕:InnoDB存储引擎(第2版)

一:体系结构

  1. Mysql体系结构
    连接池组件,管理服务和工具组件,
    SQL接口组件,查询分析器组件,优化器组件,缓冲组件,
    插件式存储引擎组件,物理文件;


  2. InnoDB体系结构
    内存池:维护共享的数据结构,缓存磁盘数据,缓存修改,重做Redo日志缓冲;
    后台线程:刷新内存池中的数据,保证缓存的是最新数据,将修改的数据刷新到磁盘文件;


二:表

  1. 索引组织表
    InnoDB中,表都是根据主键顺序组织存放的,即索引组织表;
    InnoDB主键创建方式:
    1)首先判断表中是否有非空的唯一索引(unique not null),如果有该列为主键;
    2)不符合1,自动创建一个6字节大小的指针;

  2. InnoDB的逻辑存储结构



    默认共享表空间,即所有的数据都存放在表空间中。也可以每张表中的数据单独存放在一个表空间内。
    页/块:InnoDB磁盘管理的最小单位,默认16kb。 数据页,undo页,实物数据页,大对象页。

  3. Compact行记录格式


    变长长度列表:有几个列的长度是可变的(Varchar),长度分别是多少,逆序;
    NULL标志位,表示列数据是否有NULL值,1字节,二进制位中为1的index表示该列数据为NULL;
    记录信息头:5字节,该行是否被删除,该记录拥有的记录数,下一条记录的相对位置 页内行记录链表结构

    create table mytest(
     t1 varchar(10),
     t2 varchar(10),
     t3 char, 
     t4 varchar(10)
    ) ROW_FORMAT =COMPACT;
    数据
    ('a','bb','bb','ccc')
    ('d','ee','ee','fff')
    ('d',NULL,NULL,'fff')
    

    第1行数据:
    变长字段列表,t1 t2 t4 逆序排列 t4 t2 t1,‘ccc’ 'bb' ‘a’,即03 02 01;
    NULL标志位为空;
    隐藏列:事务ID和行指针;
    固定长度char,未能占用全部长度空间时,用0x20填充;


    第2行数据:
    NULL标志位为06, 00000110 列2列3为空;
    不管是char还是varchar,null值不占用空间;


    行溢出数据
    大对象不会存放在数据页中;
    innodb页中至少有两行记录,如果只能放一行,会自动将行数据存放到溢出页中;

  4. 数据页结构


    页是Innodb管理数据库的最小磁盘单位;
    File header:记录了上一个页和下一个页,数据页双向链表组织;

  5. 约束:保证存储数据的完整性
    数据完整性有三种形式:

    • 实体完整性保证表中有一个主键
    • 域完整性保证数据每列的值满足特定的条件;
    • 参照完整性保证两张表之间的关系;

    Innodb提供的约束,来保证上述的数据完整性要求:

    • primary key,unique key - 唯一索引,
    • foreign key
    • default, not null

    外键约束:对父表进行delete和update操作时子表的对应操作 示例

    • cascade级联,
    • set null,
    • no action、restrict 抛出错误不允许操作发生(默认);
  6. 视图
    视图View是一个命名的虚表,由一个SQL查询来定义,可以当做表来使用。
    视图中没有实际的物理存储-> 操作映射到相应表上;

三:索引与算法

  1. B+树索引
    B+树索引并不能直接找到记录的具体行,只能找到页,然后数据库把页读入到内存,再在内存中查找数据。
    联合索引



    联合索引可以同时对(a,b)查询,也可以对a查询b已排好序,不能用来查询b,无序;

  2. 全文检索
    将数据库中的整本书或者文章中的内容查找出来。
    select * from blog where content like 'xxx%' B+树支持前缀查找
    select * from blog where content like '%xxx%' 全文检索
    全文检索通常使用倒排索引来实现,也是一种索引结构

    全文检索

    倒排索引

  3. 哈希索引
    Innodb会根据表的情况自动为表生成哈希索引,不能人为干预是否在一张表中生成哈希索引。
    场景:查找缓存池中的页


@梦工厂 2018.3.16

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容