MYSQL-数据引擎(MyISAM)

103 阅读4分钟

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。

MySQL**(本章节)**

PostgreSQL

MongoDB

Redis

Etcd

1.什么是数据库引擎

数据库引擎(更准确的叫法是存储引擎)是 MySQL 的一个关键特性,它决定了数据如何被存储、索引以及支持哪些功能。

你可以将存储引擎理解为数据库的“大脑”或“心脏”,它负责:

  • 数据存储格式:数据如何写在磁盘上。

  • 索引技术:如何创建索引以加速查询(如 B-Tree, Hash, R-Tree)。

  • 锁的粒度:如何处理并发访问(如表锁、行锁)。

  • 事务支持:是否支持 ACID 事务。

  • 外键:是否支持外键约束。

MySQL 的强大之处在于它提供了多种存储引擎,你可以针对不同的表,根据其用途选择最合适的引擎。

2.MyISAM介绍

这是 MySQL 5.5 之前的默认引擎,现在已不推荐在新项目中使用,但在一些旧系统中仍能看到。

  • 核心特性

  • ❌ 不支持事务:无法回滚操作。

  • ❌ 不支持外键

  • 表级锁:任何写操作(INSERT, UPDATE, DELETE)都会锁定整个表。在读多写少的场景下很快,但在有大量写操作或混合读写时,并发性能极差。

  • 全文索引:在早期版本中,它是唯一支持全文索引(FULLTEXT)的引擎。

  • 高速读:如果表主要是用于读(如 SELECT COUNT(*)),且不要求事务,它的速度可能非常快。

  • 适用场景

  • 只读或读多写极少的数据。

  • 不需要事务的简单应用(如博客文章、新闻归档)。

  • 数据仓库中的只读维度表(但现在有更好的选择)。

  • 文件结构

  • .frm:存储表结构。

  • .MYD (MYData):存储数据。

  • .MYI (MYIndex):存储索引。

    #这里就是后面创建的MyISAM表 -rw-r----- 1 mysql mysql 8672 Sep 16 21:35 myisam_table.frm -rw-r----- 1 mysql mysql 0 Sep 16 21:35 myisam_table.MYD -rw-r----- 1 mysql mysql 1024 Sep 16 21:35 myisam_table.MYI

3. Memory(内存引擎)

  • 核心特性

  • 所有数据存储在内存中:速度极快。

  • 表级锁:并发性能一般。

  • 不支持 TEXT/BLOB 类型:因为内存空间有限。

  • 数据非持久化:服务器重启或崩溃后,表中的所有数据都会丢失。表结构会保留。

  • 适用场景

  • 用于临时表缓存会话管理

  • 存放频繁访问的、非关键的、可以丢失的只读数据。

  • 注意:Redis、Memcached 等专业内存数据库通常是更好的选择。

4. Archive(归档引擎)

  • 核心特性

  • 专为高效存储大量很少被访问的归档或审计数据而设计。

  • 只支持 INSERT 和 SELECT不支持 DELETE, UPDATE 和索引(支持行插入的自动压缩,但不支持索引)。

  • 数据插入时会进行压缩,磁盘 I/O 非常少,存储空间很小。

  • 适用场景

  • 日志记录、审计数据、历史数据归档。

5. CSV(CSV引擎)

  • 核心特性

  • 数据以纯文本格式的 CSV 文件存储在服务器上。

  • 不支持索引。

  • 可以直接用文本编辑器打开查看。

  • 适用场景

  • 快速导出数据为 CSV 格式。

  • 与外部系统交换数据。

6.MyISAM表创建

必须单独指定引擎,否则他会采用默认的引擎,由于我们这里的版本5.7,所以默认是InnoDB。

-- 创建一个使用 MyISAM 存储引擎的表
CREATE TABLE myisam_table (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) ENGINE=MyISAM;

当然我们通过这个小节只是让你对数据引擎有一个基本的认识,以及历史数据库里面可能会存在的数据引擎有一个认识,新的环境里面基本不会在使用他。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。