mysql架构与存储引擎 (Myisam与Innodb)

mysql抽象架构:可以分为SQL Layer和Storage Engine Layer

mysql的engine层是基于表的,不是基于库的,创建表的语句可以指定engine

Mysql的架构

Mysql 架构器中各个模块都是什么?

(1)、连接管理与安全验证是什么?

每个客户端都会建立一个与服务器连接的线程,服务器会有一个线程池来管理这些 连接;如果客户端需要连接到 MYSQL 数据库还需要进行验证,包括用户名、密码、 主机信息等。

(2)、解析器是什么?

解析器的作用主要是分析查询语句,最终生成解析树;首先解析器会对查询语句的语法进行分析,分析语法是否有问题。还有解析器会查询缓存,如果在缓存中有对应的语句,就返回查询结果不进行接下来的优化执行操作。前提是缓存中的数据没有被修改,当然如果被修改了也会被清出缓存。

(3)、优化器怎么用?

优化器的作用主要是对查询语句进行优化操作,包括选择合适的索引,数据的读取方式,包括获取查询的开销信息,统计信息等,这也是为什么图中会有优化器指向存储引擎的箭头。之前在别的文章没有看到优化器跟存储引擎之 间的关系,在这里我个人的理解是因为优化器需要通过存储引擎获取查询的大致数据和统计信息。

(4)、执行器是什么?

执行器包括执行查询语句,返回查询结果,生成执行计划包括与存储引擎的一些处理操作。

MyIsam和InnoDB两个存储引擎

Innodb与Myisam,不管是关系型数据库(rdbms)还是nosql,数据都存储在文件中。mysql数据存储在data下,一个数据库对应一个文件夹。

  InnoDB Myisam
存储文件
.frm 表定义文件

.ibd 数据文件


.frm 表定义文件

.myd 数据文件

.myi 索引文件

行锁、表锁 表锁
事务 ACID 不支持
CRDU 读、写 读多
count 扫表 专门存储的地方
索引结构 B+树 B+树

1.存储结构

  Innodb有两个存储文件,.frm表定义文件与.ibd数据文件  其中ibd文件中存储了数据与索引信息,而Myisam中则使用了三个文件,将数据与索引分开存储。

2.表锁差异

  MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
  InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。

3、事务

  Innodb支持事务原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability) Myisam强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持

4.CRUD操作

  MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
  InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。

5.count操作

  当count(*)时,Inoodb需要进行扫表查询数量,消耗非常大。而Myisam中存储了count信息可以直接取出该值。

  如果加了where条件,这两个索引处理方式就一样了。

6.索引结构都是B+Tree

  衡量一个索引好不好的关键是IO渐进复杂度,B+Tree树的高度是可控的,可以降低IO渐进复杂度。

7. 外键

  MyISAM:不支持
  InnoDB:支持

8、 表主键

  MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
  InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。

9、 全文索引

  MyISAM:支持 FULLTEXT类型的全文索引
  InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。

总结:

InnoDB自身很多良好的特点,比如事务支持、存储 过程、视图、行级锁定等等,在并发很多的情况下,InnoDB的表现肯定要比MyISAM强很多。但是,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。

B+Tree与B Tree的区别:

B-Tree的key和data是一起的,B+Tree做了改进将data都放在了叶子节点,所有的中间节点都是key(想要学习B+树的小伙伴可以看看 http://blog.codinglabs.org/articles/theory-of-mysql-index.html
Inoodb与Myisam下的索引存储图:

Mysiam中主索引和副索引的叶子节点都指向数据文件中的地址。

Inoodb中数据是附在叶子节点上的,查询主索引会直接定位到叶子节点的数据。而查询副索引会进行两次查询,先查询到副索引叶子节点对应的主索引值,在通过主索引查询数据。select * from table where id = (select id from table where name="mic")

原文地址:https://www.cnblogs.com/Young111/p/11479241.html

时间: 2024-11-01 20:11:54

mysql架构与存储引擎 (Myisam与Innodb)的相关文章

MySQL - 两种存储引擎 (MyISAM PK InnoDB) + MVCC

总结 1.两种存储引擎各有各的有点,MyISAM专注性能,InnoDB专注事务.两者最大的区别就是InnoDB支持事务,和行锁. 2.InnoDB采用MVCC(Multi-Version Concurrency Control 多版本并发控制)来支持高并发,一种行级锁的变种.MVCC是通过保存数据在某一个时间点的快照来实现的,也就是说无论事务执行多久,每个事务看到的数据都是一致的.InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现,这两个列一个保存了行的创建时间,一个保存了行的过

MySQL进阶之存储引擎MyISAM与InnoDB的区别

一.存储引擎(表类型) 通常意义上,数据库就是数据的集合,具体到计算机数据库可以是存储器上一些文件的集合或一些内存数据的集合.我们通常说的MySQL数据库.sql Server数据库等其实是数据库管理系统(Database Management System,即DBMS),它们可以存储数据,并提供查询和更新等功能. 存储引擎就是如何为存储的数据建立索引.如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也称为表类型. 二.InnoDB和MyISAM

MySQL两种存储引擎: MyISAM和InnoDB 简单总结

MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点:不支持事务处理(transaction).不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM. InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一.InnoDB由Innob

MySQL两种存储引擎: MyISAM和InnoDB总结

MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点:不支持事务处理(transaction).不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM. InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一.InnoDB由Innob

MySQL存储引擎 - Myisam和Innodb

Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩 展名为.MYD (MYData).索引文件的扩 展名是.MYI (MYIndex). 基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的 大小只受限于操作系统文件的大小,一般为 2GB 事务处理上方面: MyISA

MySQL存储引擎MyISAM和InnoDB

MySQL存储引擎MyISAM和InnoDB 存储引擎 在MySQL中的数据拥有各种不同的技术存储文件或内存中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不用的功能和能力.通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能.这些不同的技术以及配套的相关功能在MySQL中被称之为存储引擎. MyISAM存储引擎 MyISAM存储引擎是MySQL关系数据库系统5.5版本之前默认的存储引擎. 特点 1.不支持事务 2.表级锁定形式,数据在更新时

MySQL 架构组成--存储引擎

http://hongge.blog.51cto.com/ MySQL Server 系统架构 在前一节中我们学习了mysql的逻辑模块组成,接下来我们来学习mysql存储引擎. 一.mysql存储引擎介绍: MySQL在5.1(不包括)之前的版本中,存储引擎是需要在MySQL 安装的时候就必须和MySQL 一起被编译并同时被安装的. 但是从MySQL5.1 开始,MySQL AB 对其结构体系做了较大的改造,并引入了一个新的概念:插件式存储引擎体系结构.MySQL AB 在架构改造的时候,让存

解析MySQL的体系架构及学习Mysql存储引擎MyISAM和InnoDB

mysql体系结构: 由:连接池组件.管理服务和工具组件.sql接口组件.查询分析器组件.优化器组件. 缓冲组件.插件式存储引擎.物理文件组成.mysql是独有的插件式体系结构,各个存储引擎有自己的特点. mysql各个存储引擎概述: (1) innodb存储引擎:[/color][/b] 面向oltp(online transaction processing).行锁.支持外键.非锁定读.默认采用repeaable级别(可重复读)通过next-keylocking策略避免幻读.插入缓冲.二次写

MySQL中常用的存储引擎(MyISAM 和InnoDB)

 数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用存储引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能.现在许多的数据库管理系统都支持多种不同的存储引擎.MySQL的核心就是存储引擎. 使用 SHOW ENGINES; 命令查看MySQL支持的存储引擎,  Support 列表示某种引擎是否可以使用,YES表示可以,NO表示不可以,DEFAULT表示当前默认存储引擎. mysql> SH