文档章节

MySQL InnoDB存储引擎简析

Gen_zhou
 Gen_zhou
发布于 2016/04/21 12:28
字数 702
阅读 65
收藏 3

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 索引文件

© 著作权归作者所有

Gen_zhou
粉丝 18
博文 25
码字总数 31230
作品 0
海淀
程序员
私信 提问
mysql myisam innodb 区别

最近连续接到了两次tencent的电话面试,当然不是同一个部门。都涉及到了一个mysql的基础知识问题。为了防止第三次打电话来,备注下。^^。 题目1:讲讲你对mysql myisam,innodb的认识。然后你...

马丁博客
2010/10/08
0
0
MYSQL之一步到位之InnoDB

快速认识InnoDB InnoDB是MySQL下使用最广泛的引擎,它是基于MySQL的高可扩展性和高性能存储引擎,从5.5版本开始,它已经成为了默认引擎。 InnODB引擎支持众多特性: a) 支持ACID,简单地说就...

SANSOM
2013/04/23
0
1
MySQL存储引擎InnoDB与Myisam的六大区别

MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用: MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。 MySQL支持...

Junn
2013/12/11
0
2
在MySQL 5.0里面,MyISAM和InnoDB存储引擎性能差别并不是很大

MySQL中MyISAM引擎与InnoDB引擎性能比较,基本上我们可以考虑使用InnoDB来替代我们的MyISAM引擎。 MySQL表结构 数据内容 $name = "heiyeluren"; $content = "MySQL支持数个存储引擎作为对不同...

luluback
2012/03/16
1K
3
MySQL: MyISAM和InnoDB的区别

InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行...

crazyinsomnia
2010/03/07
11.6K
2

没有更多内容

加载失败,请刷新页面

加载更多

$_ENV

$_ENV数组中的内容是在PHP解析器运行时,从PHP所在服务器中的环境变量, 导入到PHP的全局命名空间, 转变为PHP全局变量。 这些变量很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能...

vinci321
刚刚
0
0
Guava RateLimiter + AOP注解实现单机限流、统计QPS

1、基于springboot项目pom.xml添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency><d......

铁骨铮铮
今天
3
0
JAVA NIO Connection reset by peer 异常

客户端主动断开与服务端的连接,但是如果客户端掉线,服务端就接收不到了。。 异常信息 java.io.IOException: Connection reset by peerat java.base/sun.nio.ch.FileDispatcherImpl.read...

Jeremy_pan
今天
1
0
龙芯版办公软件下载

金山wps office   rpm包:http://ftp.loongnix.org/os/loongnix/1.0/os/Packages/w/wps-office-10.8.0.6472-1.a20p1.mips64el.rpm   deb包:http://packages.deepin.com/loongson/pool/......

gugudu
今天
3
0
BI报表分析和数据可视化,推荐这三个开源工具!

开源篇 一、Superset 1、技术架构:Python + Flask + React + Redux + SQLAlchemy 2、使用人群: (1)开发/分析人员做好看板,业务人员浏览看板数据 (2)业务人员可自行编辑图表,查看满足...

飓风2000
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部