Mysql数据库存储引擎

你要做冲出的黑马 而不是坠落的星星。

文章目录

  • 前言
  • 存储引擎的理解
  • 存储引擎的简介
  • Mysql数据库的体系结构
  • 存储引擎的分类接受
    • InnoDB
    • 独占表空间
    • MyISAM
    • Memory
  • 总结

前言

MySQL 提供了多个存储引擎——包括处理事务安全表的引擎和处理非事务安全表的引擎,在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。

存储引擎的理解

首先呢关于存储引擎的理解,从字面上看,存储,就是在计算机中把数据保存到磁盘或者网盘这些介质中,而引擎是发动机的核心,那么这个连起来的意思不就是保存数据的核心技术,所以存储引擎我们可以知道它是服务于存储的,通过存储引擎将数据保存就像是在计算机中如何保存数据一样,在数据库中,存储引擎的意思就是通过何种引擎将数据存储在磁盘中。

存储引擎的简介

通过上面的理解我们可以知道存储引擎就是保存数据的技术,MySQL的数据就是用各种不同的技术存储在文件(或者内存)中。
这些技术中的每一种技术都使用不同的存储机制,索引技巧,锁定水平从而提供广泛的不同的功能和能力。最终我们通过选择不同的技术从而获得更加合适的速度或者功能从而提高我们的整体水平。

而存储引擎说白了呢就是

  1. 如何存储引擎
  2. 如何为存储的数据建立索引
  3. 如何更新查询数据等技术的实现方法。

例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎,因为内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库,以确保事务处理不成功时数据的回退能力,你就要选择支持事务的存储引擎。

Mysql数据库的体系结构

那么在开始之前呢我们需要先知道mysql的体系结构是怎样的这样更有利于我们的理解。请看下图
Mysql数据库存储引擎_第1张图片
我们可以看到mysql的体系结构大致也就是,最上层是链接组件,然后下面的服务器有连接池,管理工具和服务,sql接口,解析器,优化器,存储引擎,缓存,文件系统组成

用户:进行数据库链接的人
支持接口:是第三方语言提供和数据库连接的接口,常见的有jdbc,odbc,c的标准api函数等等。
管理工具和服务:系统管理和控制工具,例如备份恢复、Mysql复制、集群等(见图)
连接层:提供与用户的连接服务,用于验证登录服务。

好的关于mysql的体系结构我不过多赘述(接下来我会更新mysql体系结构的文章)本篇文章重点谈论存储引擎,那么关于存储引擎呢,我们通过上面的描述可以知道存储引擎是在服务层的也就是说他是提供服务的,结合上面的理解,大家也可以知道存储引擎就是为了存储数据的,那么我们在这个图中还有一个地方那就是,关于存储引擎图中说的是可插拔存储引擎。那么结合上面我说的的理解方式我们可以知道,这里的可插拔也就是说,存储引擎并不是说,一成不变的,我们可以通过不同的场景去选择不同的存储引擎。那么一个东西一般只要涉及到选择的话,那么肯定就存在,默认的选择,那么现在的mysql的默认存储引擎选择的是InnoDB,关于每种存储引擎的特点的我们继续往下看。

存储引擎的分类接受

在初步介绍完存储引擎的概念后我们开始细分的给mysql的各种存储引擎做介绍

InnoDB

InnoDB作为现在Mysql的默认存储引擎,InnoDB是一个非常健壮的存储引擎这种存储引擎为用户操作数据库提供了一个强大的解决方案。
它支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。
那么InnoDB适合于那些场景呢?那就是以下的场景

更新密集的表,InnoDB存储引擎很适合处理多重并发的更新请求。
自动灾难修复,InnoDB相较于MyISAM和Memory,它支持事务它能从灾难中自动修复。
外键约束:MySQL支持外键的存储引擎只有InnoDB。
支持自动增加列AUTO_INCREMENT属性。

一般来说如果需要事务支持,外键约束,或者需要处理多重并发的更新请求那么InnoDB是个不错的选择。
Mysql数据库存储引擎_第2张图片

独占表空间

独占表空间: 每一个表分别创建一个表空间,这时。在对应的数据库目录里每一个表都有.ibd文件(这个文件包括了单独一个表的数据内容以及索引内容)。
通过show variables like ‘%innodb_file_per_table%’;可以查看是哪种类型的表空间。

MyISAM

MyISAM表是独立于操作系统之外的,这说明可以轻松地将其从Windows服务器移植到Linux服务器。每当我们建立一个MyISAM引擎的表时,就会从本地磁盘上建立三个文件,这三个文件的名字就是表名,他们的含义如下

后缀是frm的文件存储表的定义
后缀是MYD的存储数据
后缀是myi的存储索引

MyISAM表无法处理事务,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。MyISAM存储引擎特别适合在以下几种情况下使用:

  1. 选择密集型的表。 MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
  2. 插入密集型的表。 MyISAM的并发插入特性允许同时选择和插入数据。

因此呢我们一般在存储日志的时候会选择MyISAM

Memory

Memory存储引擎具有很快的速度为得到最快的响应时间,采用的逻辑存储介质是系统内存。虽然速度快了但是我们用的逻辑存储介质是系统内存,那么如果mysql守护进程突然崩溃的话我们的数据就有可能全部丢失,就像我们用网吧的电脑写文档的时候,好不容易写了上千字到最后突然,停电屏幕一黑,你写的东西全部都没了。因此在获得速度的同时也有了缺陷。它要求存储在Memory数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型。VARCHAR是一种长度可变的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用。
一般在以下几种情况下使用Memory存储引擎:

目标数据较小,而且被非常频繁地访问。 在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制Memory表的大小,设置此参数,就可以限制Memory表的最大大小。
如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。
存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。
Memory同时支持散列索引和B树索引。

B树索引优于散列索引的是,可以使用部分查询和通配查询,也可以使用<、>和>=等操作符方便数据挖掘。

散列索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了,因此散列索引值适合使用在=和<>的操作符中,不适合在<或>操作符中,也同样不适合用在order by子句中。

总结

Mysql的存储引擎有很多种上面三种是比较常用的,而关于存储引擎呢,并没有哪个更好只有更合适,每一个任务的需求不一样所以会选择不一样的存储引擎,而上面的存储引擎的区别我给弄了一张图作为总结。
Mysql数据库存储引擎_第3张图片
1.体系结构

连接层、服务层、引擎层、存储层

2.存储引擎的简介

SHOW ENGINES,
CREATE TABLE XXXX(......) ENGINE=INNODB

3.存储引擎的特点

INNODB 与 MyISAM: 事务、外键、行级锁

4.存储引擎的应用

INNODB: 存储业务系统中对于事务、数据完整性要求较高的核心数据。
MyISAM: 存储业务系统的非核心事务。

你可能感兴趣的:(数据库,数据库,mysql,android)