MySQL数据库的体系架构如下图所示:

从上图中可以看出,MySQL主要分为以下几个组件:

  • 连接池组件
  • 管理服务和工具组件
  • SQL接口组件
  • 分析器组件
  • 优化器组件
  • 缓冲组件
  • 插件式存储引擎
  • 物理文件

一、存储引擎

  存储引擎 : 其实就是指定  如何存储数据,如何为存储的数据 建立索引 以及 如何更新查询数据等技术实现的方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)

了解: 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎

下表显示了各种存储引擎的特性:

MySQL存储引擎比较
特性 MyISAM InnoDB Memory Archive NDB
存储限制  没有   64TB   有  没有  没有
事务     支持      支持
锁粒度  表   行   表  行   页
B树索引  支持   支持   支持     支持
哈希索引     支持   支持    
全文索引  支持        
集群索引     支持      
数据缓存     支持    支持    
索引缓存  支持   支持    支持    
数据压缩  支持      支持  
批量插入  高  相对低   高  非常高   高
内存消耗  低  高   中  低   低
外键支持    支持      
复制支持  支持  支持   支持  支持  支持
查询缓存  支持  支持   支持  支持  支持
备份恢复  支持  支持   支持  支持  支持
集群支持          支持

其中最常见的两种存储引擎是MyISAM 和 InnoDB

MyISAM存储引擎

1、MyISAM 是MySQL (mysql 5.5版本以前) 原来的默认存储引擎.

2、MyISAM   这种存储引擎不支持事务,不支持行级锁,只支持并发插入的表锁。

3、MyISAM   类型的表支持三种不同的存储结构:静态型、动态型、压缩型。

  (1)静态型:就是定义的表列的大小是固定(即不含有:xblob、xtext、varchar等长度可变的数据类型),这样mysql就会自动使用静态myisam格式。

  使用静态格式的表的性能比较高,因为在维护和访问的时候以预定格式存储数据时需要的开销很低。但是这高性能是用空间换来的,因为在定义的时候是固定的,所以不管列中的值有多大,都会以最大值为准,占据了整个空间。

  (2)动态型:如果列(即使只有一列)定义为动态的(xblob, xtext, varchar等数据类型),这时myisam就自动使用动态型,虽然动态型的表占用了比静态型表较少的空间,但带来了性能的降低.

  (3)压缩型:如果在这个数据库中创建的是在整个生命周期内只读的表,则这种情况就是用myisam的压缩型表来减少空间的占用。

    压缩方式参考官方文档: https://dev.mysql.com/doc/refman/5.6/en/myisampack.html

4、MyISAM也是使用B+tree索引但是和Innodb的在具体实现上有些不同。

InnoDB存储引擎

(1)MySQL默认存储引擎(MySQL 5.5 版本后).

(2)innodb 支持事务,回滚以及系统崩溃修复能力和多版本迸发控制的事务的安全。

(3)innodb 支持自增长列(auto_increment),自增长列的值不能为空,(一个表只允许存在一个自增,并且要求自增列必须为索引)

(4)innodb 支持外键(foreign key) ,外键所在的表称为子表,而所依赖的表称为父表。

(5)innodb存储引擎支持行级锁。

(6)innodb存储引擎索引使用的是B+Tree

补充3点:

1.大容量的数据集时趋向于选择Innodb。因为它支持事务处理和故障的恢复。Innodb可以利用数据日志来进行数据的恢复。主键的查询在Innodb也是比较快的。

2.大批量的插入语句时(这里是INSERT语句)在MyIASM引擎中执行的比较的快,但是UPDATE语句在Innodb下执行的会比较的快,尤其是在并发量大的时候。

3.两种引擎所使用的索引数据结构是什么?

答案:都是B+树!

    MyIASM引擎,B+树的数据结构中存储的内容实际上是实际数据的地址值。也就是说它的索引和实际数据是分开的,只不过使用索引指向了实际数据。这种索引的模式被称为非聚集索引。

    Innodb引擎的索引的数据结构也是B+树,只不过数据结构中存储的都是实际的数据,这种索引有被称为聚集索引。

Memory  存储引擎

Memory存储引擎(之前称为Heap)将表中数据存放在内存中,如果数据库重启或崩溃,数据丢失,因此它非常适合存储临时数据。

Archive存储引擎

正如其名称所示,Archive非常适合存储归档数据,如日志信息。它只支持INSERT和SELECT操作,其设计的主要目的是提供高速的插入和压缩功能。

NDB存储引擎

NDB存储引擎是一个集群存储引擎,类似于Oracle的RAC,但它是Share Nothing(非共享)的架构,因此能提供更高级别的高可用性和可扩展性。NDB的特点是数据全部放在内存中,因此通过主键查找非常快。

关于NDB,有一个问题需要注意,它的连接(join)操作是在MySQL数据库层完成,不是在存储引擎层完成,这意味着,复杂的join操作需要巨大的网络开销,查询速度会很慢。

二、测试存储引擎

创建三个表,分别使用innodb,myisam,memory 存储引擎,进行插入数据测试

1
2
3
4
5
6
7
8
9
10
create table t1(id int)engine=innodb;
create table t2(id int)engine=myisam;
create table t3(id int)engine=memory;
#看一下三个存储引擎创建的 表文件
 t1.frm  t1.ibd 
 t2.MYD  t2.MYI  t2.frm 
 t3.frm
#细心的同学会发现最后的存储引擎只有表结构,无数据
#memory,在重启mysql或者重启机器后,表内数据清空

重点[面试题]:

innodb与MyIASM存储引擎的区别:
  1.innodb 是mysql5.5版本以后的默认存储引擎, 而MyISAM是5.5版本以前的默认存储引擎.
  2.innodb 支持事物,而MyISAM不支持事物
  3.innodb 支持行级锁.而MyIASM 它支持的是并发的表级锁.
  4.innodb 支持外键, 而MyIASM 不支持外键
  5.innodb与MyIASM存储引擎都采用B+TREE存储数据, 但是innodb的索引与数据存储在一个文件中,这种方式我们称之为聚合索引. 
    而MyIASM则会单独创建一个索引文件,也就是说,数据与索引是分离开的
  6.在效率方面MyISAM比innodb高,但是在性能方面innodb要好一点.

转载于:https://www.cnblogs.com/qinghuani/p/8619844.html

MySQL 存储引擎相关推荐

  1. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  2. mysql存储引擎静态表_MySQL存储引擎(表类型)的选择

    一.MySQL存储引擎概述 MySQL与多数数据库不同的是包含存储引擎这一特性,用户可以根据应用的需要选择合适的存储引擎来使存储和索引数据,以及是否使用事务等.MySQL5.0支持的存储引擎包括MyI ...

  3. mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎

    MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...

  4. 【超简单】MySQL存储引擎的选择与配置

    [超简单]MySQL存储引擎的选择与配置 存储引擎简介 MySQL中的数据用各种不同的技术存储在文件(或内存)中.每一种技术都使用不同的存储机构,索引技巧,锁定水平并且最终提供广泛的不同的功能和能力. ...

  5. 第 3 章 MySQL 存储引擎简介

    3.1 MySQL 存储引擎概述 MyISAM存储引擎是MySQL默认的存储引擎,也是目前MySQL使用最为广泛的存储引擎之一.他的前身就是我们在MySQL发展历程中所提到的 ISAM,是ISAM的升 ...

  6. 为什么用B+树做索引MySQL存储引擎简介

    索引的数据结构 为什么不是二叉树,红黑树什么的呢? 首先,一般来说,索引本身也很大,不可能全部存在内存中,因此索引往往以索引文件的方式存在磁盘上.然后一般一个结点一个磁盘块,也就是读一个结点要进行一次 ...

  7. Mysql存储引擎详解(MyISAM与InnoDB的区别)

    Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎     MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...

  8. 第三篇 :Mysql存储引擎、数据导入导出、管理表记录、匹配条件

    一,存储引擎 1,Mysql工作原理 mysql服务 体系结构     管理工具:    命令 连接池:     (空闲进程.内存.CPU) SQL接口:   (客户端与服务器建立连接传递SQL给my ...

  9. 第三篇:Mysql存储引擎

    1,查看mysql的安装 # which mysql /usr/bin/mysql # rpm -qf /var/lib/mysql mysql-community-server-5.7.24-1.e ...

  10. MySQL存储引擎和外键学习

    MYSQL有多种存储引擎, 在创建表的时候我们使用sql语句,Create table tableName () engine=myisam|innodb; 这就指明了存储引擎是myisam还是inn ...

最新文章

  1. 为什么有人会觉得灵魂无处安放
  2. 数据倾斜的原因和解决方案
  3. 逻辑漏洞——权限控制问题
  4. python字符串startswith_Python 字符串 startswith() 使用方法及示例
  5. 敏捷自动化测试(1)—— 我们的测试为什么不够敏捷?
  6. FocusBI:租房分析可视化(PowerBI网址体验)
  7. 【使用注意】多线程导致解码混乱的情况
  8. c语言分治法求众数重数_分治法求众数 - osc_twlari2q的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. 操作系统—进程同步与互斥问题之生产者消费者问题,附赠PV操作题解题思路(思维导图版)
  10. php 将url转成伪静态,php实现url伪静态化,全过程详解
  11. iptv网关服务器系统 自己刷,iptv网关服务器镜像系统
  12. InVEST模型(工具)下载及安装(更新中)
  13. TB6612FNG电机驱动使用说明
  14. GO语言之LiteIDE软件的安装与使用
  15. c语言-蓝桥杯-平面切割
  16. 资阳停车场系统推荐_专业停车场系统维护业务广泛
  17. Python指纹识别
  18. 计算机硬件配件怎么查,如何查看计算机主板型号?主板型号在哪里[方法]
  19. python修改turtle画笔颜色的函数_以下选项中,修改turtle画笔颜色的函数是() (8.0分)_学小易找答案...
  20. 博弈论的一些基础知识(参考网络资料,学习总结,很好,分享并保存)

热门文章

  1. 实现strlen()(c语言)
  2. 单词搜索—leetcode79
  3. 合并两个有序链表—leetcode21
  4. c++ 在multimap中查找关键字的程序举例
  5. 等式成立JAVA_java – 找到两个线性等式成立的整数集
  6. c语言实现去除字符串首尾空格
  7. 计算智能-群智能算法-蚁群算法matlab实现
  8. [BUUCTF-pwn]——pwn2_sctf_2016
  9. C语言能否写windows应用程序,C语言能写windows的窗口吗?
  10. java ipv6校验_JS及java验证 IPV6,IPV4地址的 正则表达式 | 学步园