目录
InnoDB
MyISAM
存储
特性
加锁与并发–表锁
修复
索引特性
MyISAM性能
Archive 引擎
CSV存储引擎
Memory引擎
说明
首页 数据库 mysql教程 【MySQL】MySQL的存储引擎

【MySQL】MySQL的存储引擎

Feb 25, 2017 am 10:23 AM


在创建表时可以指定表的类型,也就是表的存储引擎。表的存储引擎决定了数据如何存储及如何访问,还有事务如何存储。表的存储引擎在很大程度上影响着处理SQL语句所需的存储空间和速度。不同的存储引擎所具有的特点也有所不同,有些存储引擎在处理很多复杂的SELECT语句时非常适合,而另一些则在实现快速更新时比较适合。

InnoDB

InnoDB是MySQL的默认事务型引擎,也是最重要,使用最广泛的存储引擎。它被设计用来处理大量的短期(short-lived)事务,短期事务大部分情况下是正常提交的,很少会被回滚。InnoDB的性能和自动崩溃恢复特性,使得它在非事务型存储的需求中也很流行。

除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。————《高性能MySQL》

  • InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别。其默认级别是REPEATABLE READ(可重复读),并且通过间隙锁策略防止幻读的出现。

  • InnoDB表示基于聚簇索引建立的

  • 支持外键约束。

  • 支持自动增加列AUTO_INCREMENT属性。

  • 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。

  • 删除或增加索引时不需要复制全表数据。

InnoDB内部做了很多优化,包括从磁盘读取数据时采用的可预测预读,能够自动在内存中创建hash索引以加速度操作的自适应哈希索引,以及能够加速插入操作的插入缓冲区。

InnoDB表是基于聚簇索引建立的。InnoDB的索引结构和MySQL的其他引擎有很大不同,聚簇索引对主键查询有很高的性能。但是二级索引中必须包含主键列,所以主键列很大的话,其他的所有索引都会很大。因此,若表上的索引较多的话,主键应当尽可能的小。

MyISAM

MyISAM提供了大量的特性,包括全文索引,压缩,空间函数(GIS)等,但MyISAM不支持事务和行级锁,而且有一个毫无疑问的缺陷就是崩溃后无法安全恢复。在MySQL 5.1及以前的版本中MyISAM为默认的存储引擎,正是由于该引擎的缘故,即使MySQL支持事务已经很长时间了,在很多人的概念中MySQL还是非事务型的数据库。

  • MyISAM对整张表加锁,而不是针对行。

  • 支持全文索引。

  • 支持压缩表。压缩表是不能进行修改的,可以极大地减少磁盘空间占用,因此也可以减少磁盘I/O操作,从而提升查询性能。

存储

MyISAM会将表存储在两个文件中:数据文件和索引文件,分别以.MYD和.MYI为扩展名。MyISAM表可以包含动态或者静态行。MySQL会根据表的定义来决定采用何种行格式。
在MySQL5.0中,MyISAM表如果是变长行,则默认配置只能处理256TB的数据

特性

作为MySQL最早的存储引擎之一,还是有一些特性。

加锁与并发–表锁

  MyISAM对整张表加锁,而不是针对行。读取时会对需要读到的所有表加共享锁,写入时则对表加排他锁。但是在表有读取查询的同时,也可以往表中插入新的记录(并发插入)。

修复

  对于MyISAM表,MySQL可以手工或者自动执行检查和检修操作,但这里说的修复和事务恢复以及崩溃恢复是不同的概念。

索引特性

  对于MyISAM表,即使是BLOB和TEXT等长字段,也可以基于其前500个字符创建索引。MyISAM也支持全文索引,这是一种基于分词创建的索引,可以支持复杂的查询。
延迟更新索引键
  创建MyISAM表的时候,如果指定了DELAY_KEY_WRITE选项,在每次修改执行完成时,不会立刻将修改的索引数据写入磁盘。
  

MyISAM性能

MyISAM引擎设计简单,数据以紧密格式存储,所以在某些场景下的性能很好。但由于表锁的存在对于性能有很大的影响。

Archive 引擎

Archive存储引擎只支持INSERT和SELECT。Archive引擎会缓存所有的写并利用zlib对插入进行压缩,所以比MyISAM表的磁盘I/O更少。但是每次SELECT查询都需要执行全表扫描。所以Archive表适合日志和数据采集类应用,这类应用做数据分析时往往需要全表扫描。

Archive引擎支持行级锁和专用的缓冲区,所以可以实现高并发的插入。在一个查询开始直至返回表中存在的所有的行数之前,Archive会阻止其他的SELECT执行,以实现一致性读。另外,也实现了批量插入在完成之前对读操作不可见。这种机制模仿了事务和MVCC的一些特性,但是Archive引擎不是一个事务型的引擎,而是一个针对高速插入和压缩做了优化的引擎。

CSV存储引擎

这个引擎可以将普通的CSV文件作为MySQL的表来处理,但这种表不支持索引。只需要将CSV文件copy到CSV存储引擎的数据目录下,就能使用在MySQL中已表的规则打开使用。

Memory引擎

如果需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,那么使用Memory表是非常有用的。Memory表比MyISAM表要快一个数量级,因为所有数据都保存在内存中,不需要进行磁盘I/O操作。Memory表的结构在重启以后还会保留,但数据丢失。

  • 支持Hash索引,因此查找操作非常快。

  • 是表级锁,因此并发写入性能较低。

  • 不支持BLOB或TEXT类型的列,并且每行长度是固定的,即使指定了varchar,实际存储中也会被转换为char。

说明

除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎——《高性能MySQL》

另外上面只是列举了一些经常遇见的存储引擎,并不全面。

在创建表时可以指定表的类型,也就是表的存储引擎。表的存储引擎决定了数据如何存储及如何访问,还有事务如何存储。表的存储引擎在很大程度上影响着处理SQL语句所需的存储空间和速度。不同的存储引擎所具有的特点也有所不同,有些存储引擎在处理很多复杂的SELECT语句时非常适合,而另一些则在实现快速更新时比较适合。

InnoDB

InnoDB是MySQL的默认事务型引擎,也是最重要,使用最广泛的存储引擎。它被设计用来处理大量的短期(short-lived)事务,短期事务大部分情况下是正常提交的,很少会被回滚。InnoDB的性能和自动崩溃恢复特性,使得它在非事务型存储的需求中也很流行。

除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。————《高性能MySQL》

  • InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别。其默认级别是REPEATABLE READ(可重复读),并且通过间隙锁策略防止幻读的出现。

  • InnoDB表示基于聚簇索引建立的

  • 支持外键约束。

  • 支持自动增加列AUTO_INCREMENT属性。

  • 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。

  • 删除或增加索引时不需要复制全表数据。

InnoDB内部做了很多优化,包括从磁盘读取数据时采用的可预测预读,能够自动在内存中创建hash索引以加速度操作的自适应哈希索引,以及能够加速插入操作的插入缓冲区。

InnoDB表是基于聚簇索引建立的。InnoDB的索引结构和MySQL的其他引擎有很大不同,聚簇索引对主键查询有很高的性能。但是二级索引中必须包含主键列,所以主键列很大的话,其他的所有索引都会很大。因此,若表上的索引较多的话,主键应当尽可能的小。

MyISAM

MyISAM提供了大量的特性,包括全文索引,压缩,空间函数(GIS)等,但MyISAM不支持事务和行级锁,而且有一个毫无疑问的缺陷就是崩溃后无法安全恢复。在MySQL 5.1及以前的版本中MyISAM为默认的存储引擎,正是由于该引擎的缘故,即使MySQL支持事务已经很长时间了,在很多人的概念中MySQL还是非事务型的数据库。

  • MyISAM对整张表加锁,而不是针对行。

  • 支持全文索引。

  • 支持压缩表。压缩表是不能进行修改的,可以极大地减少磁盘空间占用,因此也可以减少磁盘I/O操作,从而提升查询性能。

存储

MyISAM会将表存储在两个文件中:数据文件和索引文件,分别以.MYD和.MYI为扩展名。MyISAM表可以包含动态或者静态行。MySQL会根据表的定义来决定采用何种行格式。
在MySQL5.0中,MyISAM表如果是变长行,则默认配置只能处理256TB的数据

特性

作为MySQL最早的存储引擎之一,还是有一些特性。

加锁与并发–表锁

  MyISAM对整张表加锁,而不是针对行。读取时会对需要读到的所有表加共享锁,写入时则对表加排他锁。但是在表有读取查询的同时,也可以往表中插入新的记录(并发插入)。

修复

  对于MyISAM表,MySQL可以手工或者自动执行检查和检修操作,但这里说的修复和事务恢复以及崩溃恢复是不同的概念。

索引特性

  对于MyISAM表,即使是BLOB和TEXT等长字段,也可以基于其前500个字符创建索引。MyISAM也支持全文索引,这是一种基于分词创建的索引,可以支持复杂的查询。
延迟更新索引键
  创建MyISAM表的时候,如果指定了DELAY_KEY_WRITE选项,在每次修改执行完成时,不会立刻将修改的索引数据写入磁盘。
  

MyISAM性能

MyISAM引擎设计简单,数据以紧密格式存储,所以在某些场景下的性能很好。但由于表锁的存在对于性能有很大的影响。

Archive 引擎

Archive存储引擎只支持INSERT和SELECT。Archive引擎会缓存所有的写并利用zlib对插入进行压缩,所以比MyISAM表的磁盘I/O更少。但是每次SELECT查询都需要执行全表扫描。所以Archive表适合日志和数据采集类应用,这类应用做数据分析时往往需要全表扫描。

Archive引擎支持行级锁和专用的缓冲区,所以可以实现高并发的插入。在一个查询开始直至返回表中存在的所有的行数之前,Archive会阻止其他的SELECT执行,以实现一致性读。另外,也实现了批量插入在完成之前对读操作不可见。这种机制模仿了事务和MVCC的一些特性,但是Archive引擎不是一个事务型的引擎,而是一个针对高速插入和压缩做了优化的引擎。

CSV存储引擎

这个引擎可以将普通的CSV文件作为MySQL的表来处理,但这种表不支持索引。只需要将CSV文件copy到CSV存储引擎的数据目录下,就能使用在MySQL中已表的规则打开使用。

Memory引擎

如果需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,那么使用Memory表是非常有用的。Memory表比MyISAM表要快一个数量级,因为所有数据都保存在内存中,不需要进行磁盘I/O操作。Memory表的结构在重启以后还会保留,但数据丢失。

  • 支持Hash索引,因此查找操作非常快。

  • 是表级锁,因此并发写入性能较低。

  • 不支持BLOB或TEXT类型的列,并且每行长度是固定的,即使指定了varchar,实际存储中也会被转换为char。

说明

除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎——《高性能MySQL》

另外上面只是列举了一些经常遇见的存储引擎,并不全面。

 以上就是【MySQL】MySQL的存储引擎的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

phpmyadmin怎么打开 phpmyadmin怎么打开 Apr 10, 2025 pm 10:51 PM

可以通过以下步骤打开 phpMyAdmin:1. 登录网站控制面板;2. 找到并点击 phpMyAdmin 图标;3. 输入 MySQL 凭据;4. 点击 "登录"。

MySQL:世界上最受欢迎的数据库的简介 MySQL:世界上最受欢迎的数据库的简介 Apr 12, 2025 am 12:18 AM

MySQL是一种开源的关系型数据库管理系统,主要用于快速、可靠地存储和检索数据。其工作原理包括客户端请求、查询解析、执行查询和返回结果。使用示例包括创建表、插入和查询数据,以及高级功能如JOIN操作。常见错误涉及SQL语法、数据类型和权限问题,优化建议包括使用索引、优化查询和分表分区。

redis怎么使用单线程 redis怎么使用单线程 Apr 10, 2025 pm 07:12 PM

Redis 使用单线程架构,以提供高性能、简单性和一致性。它利用 I/O 多路复用、事件循环、非阻塞 I/O 和共享内存来提高并发性,但同时存在并发性受限、单点故障和不适合写密集型工作负载的局限性。

MySQL的位置:数据库和编程 MySQL的位置:数据库和编程 Apr 13, 2025 am 12:18 AM

MySQL在数据库和编程中的地位非常重要,它是一个开源的关系型数据库管理系统,广泛应用于各种应用场景。1)MySQL提供高效的数据存储、组织和检索功能,支持Web、移动和企业级系统。2)它使用客户端-服务器架构,支持多种存储引擎和索引优化。3)基本用法包括创建表和插入数据,高级用法涉及多表JOIN和复杂查询。4)常见问题如SQL语法错误和性能问题可以通过EXPLAIN命令和慢查询日志调试。5)性能优化方法包括合理使用索引、优化查询和使用缓存,最佳实践包括使用事务和PreparedStatemen

为什么要使用mysql?利益和优势 为什么要使用mysql?利益和优势 Apr 12, 2025 am 12:17 AM

选择MySQL的原因是其性能、可靠性、易用性和社区支持。1.MySQL提供高效的数据存储和检索功能,支持多种数据类型和高级查询操作。2.采用客户端-服务器架构和多种存储引擎,支持事务和查询优化。3.易于使用,支持多种操作系统和编程语言。4.拥有强大的社区支持,提供丰富的资源和解决方案。

apache怎么连接数据库 apache怎么连接数据库 Apr 13, 2025 pm 01:03 PM

Apache 连接数据库需要以下步骤:安装数据库驱动程序。配置 web.xml 文件以创建连接池。创建 JDBC 数据源,指定连接设置。从 Java 代码中使用 JDBC API 访问数据库,包括获取连接、创建语句、绑定参数、执行查询或更新以及处理结果。

docker怎么启动mysql docker怎么启动mysql Apr 15, 2025 pm 12:09 PM

在 Docker 中启动 MySQL 的过程包含以下步骤:拉取 MySQL 镜像创建并启动容器,设置根用户密码并映射端口验证连接创建数据库和用户授予对数据库的所有权限

centos安装mysql centos安装mysql Apr 14, 2025 pm 08:09 PM

在 CentOS 上安装 MySQL 涉及以下步骤:添加合适的 MySQL yum 源。执行 yum install mysql-server 命令以安装 MySQL 服务器。使用 mysql_secure_installation 命令进行安全设置,例如设置 root 用户密码。根据需要自定义 MySQL 配置文件。调整 MySQL 参数和优化数据库以提升性能。

See all articles