MySQL InnoDB存储引擎简析

MySQL存储引擎

InnoDB存储引擎

特点:

  • 支持事务
  • 行级锁
  • B树组织索引
  • 支持外键

InnoBD 多版本(multi-versioned)

InnoDB默认为每一行记录添加了三个字段:

  • DB_TRX_ID (6byte): 该记录最近一次发生inserted或updated操作的事务标识
  • DB_ROLL_PTR (7byte): 回滚指针,指向rollback segment中的undo log记录,undo log记录中包含updated操作之前的行数据
  • DB_ROW_ID (6byte): 新插入行的单调递增ID,当由InnoDB自动生成聚簇索引时,该索引包含Row ID的值,否则DB_ROW_ID列不会出现在任何索引中

聚簇索引(Clustered Index)

每个InnoDB表都有一个用来存储所有行数据的特殊索引:Clustered Index。所有行数据都是通过聚簇索引来组织存储的。 通常情况下,聚簇索引是主键的代名词。

如果没有为InnoDB表定义一个主键,Mysql会选择表中第一个非空的唯一索引列做为聚簇索引。若该表没有主键或合适的唯一索引列,InnoDB内部会在包含row ID的虚拟列上生成一个隐藏的聚簇索引。Row ID的值是根据新插入记录的顺序而单调递增的。

官方文档:

If the table has no PRIMARY KEY or suitable UNIQUE index, InnoDB internally generates a hidden clustered index on a synthetic column containing row ID values. Thus, the rows ordered by the row ID are physically in insertion order.

辅助索引(Secondary Index)

除了聚簇索引之外的所有索引称为辅助索引。

在InnoDB中,辅助索引的每一条记录存储该行的所有主键字段,这些主键字段。InnoDB使用主键的值在聚簇索引中查找对应的记录。

InnoDB索引的物理结构

  • 所有的InnoDB索引都是以B树的形式存储的,索引记录存储在树的叶子节点。
  • 聚簇索引存储记录的所有字段,包含6个字节的transaction ID字段和7个字节的roll pointer字段。
  • 若没有为表设置主键,每个聚簇索引记录还会包含一个6字节的row ID字段。
  • 每个辅助索引记录包含主键的值

覆盖索引(covering index)

覆盖索引:从辅助索引中就可以得到查询的记录,而不需要查询聚簇索引中的记录。

使用覆盖索引的好处: 辅助索引不包含整行记录的所有字段信息,故其大小远小于聚簇索引,因此可以减少大量的IO操作。

MyISAM存储引擎

特点:

  • 不支持事务
  • 表级锁
  • 不支持外键
  • MyISAM表存储有三个文件组成:
    • table_name.frm 存储表结构
    • table_name.MYD 数据文件
    • table_name.MYI 索引文件

转载于:https://my.oschina.net/u/553773/blog/663715

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值