MySQL引擎

本文介绍了MySQL的逻辑架构,包括连接处理、查询解析和存储引擎层。重点讨论了InnoDB和MyISAM两种存储引擎。InnoDB作为默认引擎,支持事务处理、行级锁和外键,具有崩溃恢复能力,适合高并发场景。而MyISAM支持全文索引,但不支持事务,适用于读多写少的情况。
摘要由CSDN通过智能技术生成

目录

前言

​​​​​​​​​​​​​​1、MySQL逻辑架构

2、InnoDB存储引擎和MyISAM存储引擎



前言

        存储引擎在MySQL中主要负责的是数据的存储和提取,更具体的说法是:存储引擎是将数据存储到磁盘、从磁盘查询数据、更新磁盘数据、为数据建立索引等等一系列功能的具体实现。存储引擎可以看作是MySQL数据库的核心,无论是数据文件格式还是索引类型,无论是事务还是锁,不同的引擎都会有不同的实现。本篇简单介绍InnoDB和MySIAM引擎。部分内容总结摘抄自《高性能Mysql》,仅作笔记。



1、MySQL逻辑架构

        在介绍MySQL存储引擎之前我们先来了解下MySQL的逻辑架构,以便于我们更好地了解存储引擎是怎么工作的。MySQL的逻辑架构图如下图:

  • 第一层架构包括连接处理、授权认证等功能,大多数基于网络的客户端/服务器的工具或服务器都有类似的架构;
  • 第二层架构包括查询解析、分析、优化、缓存以及所有的内置函数,所有包括存储过程、触发器、视图等跨存储引擎的功能也都在这一层实现,可以说这一层包含了MySQL的大多数的核心服务功能;
  • 第三层架构包括了存储引擎。存储引擎负责MySQL中数据的存储和提取。

        这里我们简单介绍下前两层架构。MySQL是客户端/服务器架构的,因此服务器中需要有管理连接和负责服务器安全的的功能。每个客户端都会在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或CPU中运行;客户端连接到MySQL服务器时,服务器需要对其进行认证,认证基于用户名、密码。以上都属于第一层架构的功能。

        我们在MySQL客户端中执行的SQL语句在MySQL服务器端并不是拿过来直接就执行的,需要经过一系列的优化和解释步骤,这就是第二层架构的主要功能。MySQL会解析查询,并创建解析树,然后对其进行各种优化,包括重写查询、决定表的读取顺序以及选择合适的索引等。用户可以通过特殊的关键字提示优化器,影响它的决策过程。也可以使用explain请求优化器解释优化过程的各个因素,使用户可以知道服务器是如何进行优化决策的,并提供一个参考基准,便于用户重构查询。对于SELECT语句,在解析查询之前,服务器会先检查查询缓存,如果能够在里面找到对应的查询,服务器就不必再执行查询解析、优化和执行的整个过程,而是直接返回查询缓存中的结果集。

2、InnoDB存储引擎和MyISAM存储引擎

        InnoDB是MySQL的默认事务型存储引擎,也是最重要、使用最广泛的引擎,在MySQL5.1版本正式替代MyISAM称为默认引擎。作为一个如此优秀的存储引擎,InnoDB有着许多特性。

  • InnoDB的数据存储在表空间中,表空间是InnoDB管理的一个黑盒子,由一系列的数据文件组成;
  • InnoDB采用多版本并发控制(MVCC)来支持高并发,并且实现了四个标准的隔离级别。其默认级别时REPEATABLE READ(可重复读),并通过间隙锁策略防止幻读的出现,间隙锁使得InnoDB不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,以防止幻影行的插入;
  • InnoDB是基于聚簇索引建立的,关于聚簇索引后面的文章会详细介绍;
  • InnoDB内部做了很多优化,包括从磁盘读取数据时采用的可预测性预读,能够自动在内存中创建hash索引以加速读操作的自适应哈希索引,以及能够加速插入操作的插入缓冲区等;
  • InnoDB具有自动崩溃恢复的特性。

        MyISAM引擎在MySQL5.1版本以前都是默认的存储引擎,提供了包括全文索引、压缩和空间函数等大量特性,但不支持事务和行级锁,最关键的是崩溃后无法安全恢复。

  • MyISAM将表存储在两个文件中,分别是扩展名为.MYD的数据文件和扩展名为.MYI的索引文件;
  • MyISAM可以包含动态或静态的行;
  • MyISAM可以对整张表加锁,而不是对行加锁。读取时会对需要读到的所有表加共享锁,写入时则对表加排他锁;
  • MyISAM支持全文索引,这是一种基于分词创建的索引,可以支持复杂的查询;
  • 对于MyISAM表,MySQL可以手工或自动执行检查和修复操作。

        InnoDB和MyISAM的区别如下:

  1. InnoDB支持事务,MyISAM不支持事务;
  2. InnoDB支持行级锁和表级锁,MyISAM只支持表级锁;
  3. InnoDB支持外键,MyISAM不支持外键;
  4. InnoDB不保存表的总行数,MyISAM保存了整个表的总行数,例如使用SELECT COUNT(*) FROM table在InnoDB存储引擎中执行需要执行全表扫描,而对MyISAM存储引擎来说只是查询一个变量值;
  5. InnoDB在5.7版本后才支持全文索引,MyISAM支持全文索引;
  6. InnoDB是聚簇索引,MyISAM是非聚簇索引,关于索引后面的文章会详细介绍;
  7. InnoDB支持自动崩溃安全恢复,MyISAM在崩溃后无法安全恢复。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL 数据库管理系统支持多种数据库引擎。每种数据库引擎都有不同的特点,适用于不同的用例。 常见的 MySQL 数据库引擎包括: - MyISAM:MyISAM 是 MySQL 的默认引擎,在性能和数据完整性方面表现良好。它支持全文索引,但不支持事务和行级锁定。 - InnoDB:InnoDB 是一种支持事务处理和行级锁定的引擎。它通常被用于需要高可用性和数据完整性的应用程序。 - Memory:Memory 引擎将数据存储在内存中,速度非常快,但数据不能持久化。它通常用于临时存储数据或缓存数据。 - CSV:CSV 引擎允许将数据存储在 CSV 格式的文件中,并提供对 CSV 文件的简单查询支持。 - Archive:Archive 引擎提供了一种高压缩比的方式来存储大量只读数据。它不支持索引,因此只能用于存储历史数据或进行批量加载。 在选择 MySQL 数据库引擎时,应考虑应用程序的性能、可用性、数据完整性以及其他特定需求,并根据这些因素来决定最后使用哪 ### 回答2: MySQL引擎是用于存储和管理数据库数据的关键组件。MySQL提供了多种不同的引擎,每个引擎都具有其独特的特点和优势。下面是一些常见的MySQL引擎及其区别: 1. MyISAM引擎:这是MySQL最早的引擎,它使用表级锁定机制,适用于读取频率高于写入频率的场景。但是,它不支持事务处理和数据完整性的约束,因此在需要ACID事务支持的应用中不适用。 2. InnoDB引擎:这是MySQL默认的事务性存储引擎,它支持ACID事务、行级锁定和外键约束等重要特性。它适用于需要高可靠性和数据完整性的应用。InnoDB引擎通过自动将数据缓存到内存中来提高性能,并具有崩溃恢复功能,可以在数据库崩溃后恢复数据。 3. Memory引擎:也称为Heap引擎,它将表中的数据存储在内存中,因此读取速度非常快。然而,由于数据存储在内存中,所以在数据库崩溃时数据会丢失。Memory引擎适用于临时数据、缓存和临时表等应用场景。 4. NDB Cluster引擎:也称为MySQL Cluster引擎,它通过将数据分布在多个节点上来提供高可用性和性能。NDB Cluster引擎适合于需要高并发访问和高可用性的大规模应用,如电信、金融和电子商务等领域。 5. Archive引擎:这是一种非事务性存储引擎,适用于归档和大量读取少量写入的应用。它以高度压缩的方式存储数据,节省了存储空间。Archive引擎不支持索引,只能进行全表扫描操作。 根据应用的需求和特点,选择合适的MySQL引擎可以提供更好的性能、可用性和数据完整性。 ### 回答3: MySQL是一种关系型数据库管理系统,它有多个可用的引擎来处理和存储数据。在MySQL中,常用的引擎包括InnoDB、MyISAM、MEMORY、CSV等。 首先,InnoDB是MySQL的默认引擎,并且在性能和功能上提供了许多优势。它支持事务处理、行级锁和外键约束等特性,适合于需要高并发读写的应用。InnoDB还提供了自动崩溃恢复机制,可以在数据库发生崩溃时保证数据的一致性。 其次,MyISAM是另一个常用的引擎,适用于一些读取频率高但写入频率较低的应用。它的优点是速度快,支持全文索引和空间索引,但不支持事务和行级锁定,也不具备自动崩溃恢复的功能。 另外,MEMORY引擎适用于数据量较小的表,将数据存储在内存中,读写速度非常快。然而,一旦MySQL服务器关闭,数据将丢失,不具备持久性。 此外,CSV引擎用于处理以逗号分隔的值(CSV)文件,它允许将CSV文件视为表,并进行查询和修改。但是,与其他引擎相比,CSV引擎的功能相对有限。 总之,不同的引擎适用于不同的应用场景。选择适合的引擎可以提高数据库的性能和效率,并满足应用的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值