MySQL进阶-存储引擎

目录

1.MySQL体系结构

体系结构图

 各层的作用

2.存储引擎简介

2.1查看当前表的存储引擎

2.2 查询mysql支持的存储引擎

2.3 InnoDB简介

 2.4 MyISAM简介

2.5 Memory简介

3.存储引擎的选择


1.MySQL体系结构

mysql体系结构主要有四层结构,从上到下依次是:连接层-> 服务层-> 引擎层-> 存储层

体系结构图

MySQL进阶-存储引擎_第1张图片

 各层的作用

1、连接层:主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。

2、服务层:第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。

3、引擎层:存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。

4、存储层:主要是将数据存储在文件系统之上,并完成与存储引擎的交互。

2.存储引擎简介

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表结构。

在之前我们建表时都没有指定存储引擎,但是在mysql中的默认存储引擎就是 Innodb。

2.1查看当前表的存储引擎

可以查看某张表的建表语句

show create table account;

MySQL进阶-存储引擎_第2张图片

 ENGINE字段就是指定的存储引擎,所以在建表中我们就可以在这个字段指定对应的存储引擎。

例如:

create table sm(
    id int auto_increment primary key,
    name varchar(10)
)engine = 存储引擎名称;

2.2 查询mysql支持的存储引擎

查询mysql所支持的存储引擎可以用这个语句

show engines;

MySQL进阶-存储引擎_第3张图片

 Engine:存储引擎名称

Support:当前数据库是否支持

Comment:注释说明

Transactions:是否支持事务

2.3 InnoDB简介

InnoDB是MySQL数据库管理系统中最常用的存储引擎之一,它提供了许多高级功能和性能优化,特别适合于处理事务处理和高并发负载的应用程序。

特点:

  1. 事务支持:InnoDB是一个支持ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。这意味着它可以确保数据的完整性和一致性,特别适用于需要处理金融交易或其他重要数据的应用程序。

  2. 行级锁定:InnoDB使用行级锁定(Row-Level Locking)来实现并发控制,允许多个事务同时访问同一张表的不同行,而不会导致锁定整个表。这提高了并发性能,减少了锁定冲突。

  3. 外键约束:InnoDB支持外键约束,可以在表之间建立引用关系,以维护数据的完整性。这允许数据库执行引用完整性检查,并确保父表和子表之间的关系是一致的。

  4. 数据缓存和索引缓存:InnoDB使用数据缓存(Data Buffer Cache)来存储表中的数据和索引缓存(Index Buffer Cache)来存储索引数据。这些缓存提高了查询性能,减少了对磁盘的访问。

  5. 自动崩溃恢复:InnoDB支持自动崩溃恢复功能,可以在数据库异常关闭后自动将数据库恢复到一致的状态,而无需手动干预。

  6. 支持热备份:InnoDB支持在线备份,允许在数据库运行时备份数据而不需要停机。这有助于提高系统的可用性。

  7. 多版本并发控制(MVCC):InnoDB使用MVCC机制,允许事务并发运行而不会阻塞彼此。每个事务可以看到数据库的一致性快照,这有助于避免脏读和不可重复读问题。

  8. 自适应哈希索引:InnoDB可以自动创建和管理哈希索引,以加速特定类型的查询操作,例如等值查找。

  9. 支持大容量数据:InnoDB支持大容量的数据存储,适用于需要存储大量数据的应用程序。

涉及的文件结构:

 InnoDB引擎的每张表都会对应一个表空间文件,类似于:xxx.ibd,存储表的结构(frm,sdi)、数据和索引。

MySQL进阶-存储引擎_第4张图片

 2.4 MyISAM简介

MyISAM引擎是MySQL早期的默认存储引擎

特点:

  1. 不支持事务:MyISAM不支持事务,因此不适用于需要严格的ACID(原子性、一致性、隔离性、持久性)事务支持的应用程序。这意味着如果在MyISAM表上执行INSERT、UPDATE或DELETE操作时发生错误,无法回滚到之前的状态。

  2. 表级锁定:MyISAM使用表级锁定(Table-Level Locking)来控制并发访问。这意味着当一个事务修改表中的某一行时,其他事务无法同时修改表的其他行,可能会导致锁定冲突和性能问题。

  3. 支持全文搜索:MyISAM存储引擎支持全文搜索功能,使其在需要进行文本搜索的应用中表现出色。MySQL的全文索引可以加速文本搜索操作。

  4. 不支持外键:MyISAM不支持外键约束,因此无法维护表之间的引用关系。这使得数据的完整性在一定程度上受到限制。

  5. 支持压缩表:MyISAM支持表级别的数据压缩,可以减小数据文件的尺寸,从而节省磁盘空间。这对于存储大量静态数据的表格非常有用。

  6. 支持表级别的锁定:MyISAM允许表级别的读锁定和写锁定,这使得在一些特殊情况下,如备份和优化表时,可以更容易地进行锁定和解锁。

  7. 不支持崩溃恢复:MyISAM不具备自动崩溃恢复机制,如果数据库崩溃或发生硬件故障,可能需要手动修复表格。

  8. 适用于只读或很少修改的数据:由于不支持事务和表级锁定,MyISAM通常适用于只读或很少修改的数据,例如存档数据、日志数据等。

涉及的文件结构:

xxx.sdi:存储表结构信息

xxx.MYD:存储数据

xxx.MYI:存储索引

2.5 Memory简介

Memory存储引擎是MySQL数据库管理系统中的一种特殊存储引擎,也被称为 "HEAP" 存储引擎。与其他常见的存储引擎(如InnoDB、MyISAM等)不同,Memory 存储引擎将数据完全存储在内存中,而不是存储在磁盘上,这使得 Memory 存储引擎非常快速。

Memory引擎的表数据时存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用。

特点:

  1. 数据存储在内存中:Memory 存储引擎将表中的数据存储在内存中,这意味着对表的读取和写入操作非常快速。它特别适用于需要快速访问临时数据的情况,例如会话缓存或临时表。

  2. 不支持事务:Memory 存储引擎不支持事务,因此不适合需要 ACID 特性的应用程序。如果数据库崩溃或发生错误,数据可能会丢失。

  3. 表级锁定:Memory 存储引擎使用表级锁定,这意味着当一个连接修改表的一部分时,其他连接无法同时修改同一表的其他部分。这可能导致锁定冲突。

  4. 不支持索引类型:Memory 存储引擎支持基本索引,但不支持某些高级索引类型,如全文索引。这会限制某些查询的效率。

  5. 不支持外键约束:Memory 存储引擎不支持外键约束,因此无法维护表之间的引用关系。

  6. 数据不持久化:由于数据存储在内存中,如果数据库服务器关闭或崩溃,数据将丢失。因此,Memory 存储引擎通常用于存储临时数据或缓存,而不是持久存储。

  7. 适用于临时数据和高速缓存:Memory 存储引擎适合用于需要快速读取和写入数据的应用程序,例如缓存存储或需要频繁重建的临时数据表。

 涉及的文件结构:

xxx.sdi:存储表结构信息

MySQL进阶-存储引擎_第5张图片

3.存储引擎的选择

存储引擎之前的特点都是各不相同的,只需要在实际情况选择最合适的存储引擎即可。

  1. InnoDB存储引擎

    • 适用场景:适用于大多数应用程序,特别是那些需要事务支持和数据完整性的应用。
    • 优点:支持ACID事务、行级锁定、外键约束,适用于高并发、高事务处理的应用。
    • 注意事项:相对于其他存储引擎,InnoDB通常需要更多的内存,因此需要配置适当的系统资源。
  2. MyISAM存储引擎

    • 适用场景:适用于只读或很少修改的数据,例如静态数据或日志数据。
    • 优点:读取性能较高,不支持事务的应用可以受益于它的速度。
    • 注意事项:不支持事务、表级锁定,不适用于高并发写入和需要数据完整性的应用。
  3. Memory存储引擎

    • 适用场景:适用于需要快速读取和写入数据的缓存或临时数据存储。
    • 优点:数据存储在内存中,读取和写入非常快速,适用于缓存和临时数据表。
    • 注意事项:不支持事务、表级锁定,数据不持久化,不适用于需要长期存储数据的应用。

在选择存储引擎时可以考虑下面的因素

  • 事务需求:如果应用程序需要支持事务(例如,处理金融交易或需要数据一致性),则应选择支持事务的存储引擎,如InnoDB。

  • 并发性需求:考虑应用程序的并发性需求。InnoDB的行级锁定可以提供更好的并发性,而MyISAM的表级锁定可能导致性能问题。

  • 数据持久性:如果需要持久性数据存储,应选择支持数据持久性的存储引擎,如InnoDB。如果可以容忍数据丢失,Memory存储引擎可能是一个选择。

  • 读取和写入模式:了解应用程序的读取和写入模式,以便选择适当的存储引擎。例如,对于只读操作频繁的应用程序,MyISAM可能是一个合理的选择。

  • 系统资源:根据系统的内存、CPU和磁盘资源来选择存储引擎。不同存储引擎对资源的使用有不同的要求。

  • 全文搜索需求:如果应用程序需要全文搜索功能,MyISAM通常比InnoDB更适合,因为它支持全文索引

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