MySQL引擎

一、Mysql引擎简介

-------------------------------------------------------------------------

1.ISAM(Indexed Sequential Access Method)

  ISAM 引擎在设计之时就考虑到被查询数据库的次数远大于更新的次数, 是一个定义明确且历经时间考验的数据表格管理方法。因此,ISAM 执行读取操作的速度很快,并且不占用大量的内存和存储资源。
  ISAM 的两个主要不足之处在于,它不支持事务处理,也不能够容错。如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果将 ISAM 用在关键任务应用程序里,那就必须经实时备份你所有的数据。

2.MyISAM

  MyISAM 引擎是 ISAM 扩展格式(MySQL5.5 之前版本的缺省数据库引擎)。MyISAM不仅 拥有ISAM的所有功能,还额外提供了 ISAM 里所没有的索引和字段管理的大量功能以及使用一种表格锁定的机制,来优化多个并发的读写操作。其代价是你需要经常运行 OPTIMIZE TABLE 命令,来恢复被更新机制所浪费的空间。MYISAM 强调了快速读取操作,在 WEB 开发中所进行的大量数据操作都是读取操作,所以MYSQL受到极大的欢迎,甚至大多数虚拟主机提供商和 INTERNET 平台提供商只允许使用 MYISAM 格式。
  MyISAM 格式的一个重要缺陷就是不能在表损坏后恢复数据。
如果使用该数据库引擎,会生成三个文件:
.frm:表结构信息
.MYD:数据文件
.MYI:表的索引信息

3.InnoDB

  InnoDB 引擎是造就 MySQL 灵活性技术的直接产品,这项技术就是 MYSQL++API。 ISAM 和 MyISAM 数据库引擎不支持事务处理(transaction process)也不支持外键,但是 InnoDB 支持事务和外键的使用,这两点都是前两个引擎所没有的。InnoDB是现在的 MySQL(5.5 以上版本)常用版本的默认引擎。MySQL 官方对 InnoDB 是这样解释的:InnoDB 给 MySQL 提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID 兼容)存储引擎。
  InnoDB 锁定在行级,在 SELECT 语句提供一个与 Oracle 风格一致的非锁定读,这些特色增加了多用户部署的性能。没有在 InnoDB 中扩大锁定的需要,因为在 InnoDB 中行级锁定适合非常小的空间。InnoDB 也支持 FOREIGN KEY强制。在 SQL 查询中,你可以自由地将 InnoDB 类型的表与其它 MySQL 的表的类型混合起来,甚至在同一个查询中也可以混合。
  InnoDB 是为处理巨大数据量时的最大性能设计,它的 CPU 效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。
  InnoDB 存储引擎被完全与 MySQL 服务器整合,InnoDB 存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB 存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与 MyISAM 表不同,比如在 MyISAM 表中每个表被存在分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为 2GB 的操作系统上。
  在 MySQL5.7 版本中,InnoDB 存储引擎管理的数据文件为两个:分别是 frm,idb 文件。
  InnoDB 特点:
1)、支持事务
2)、数据多版本读取(InnoDB+MyISAM+ISAM)
3)、锁定机制的改进
4)、实现外键

4.innodb 与 myisam 区别

  1. InnoDB 支持事务,MyISAM 不支持,对于 InnoDB 每一条 SQL 语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条 SQL 语言放在 begin transaction 和 commit 之间,组成一个事务;
  2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;
  3. InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
  4. InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
  5. Innodb 不支持全文索引,而 MyISAM 支持全文索引,查询效率上 MyISAM 要高

5.如何选择

  1. 是否要支持事务,如果要请选择 innodb,如果不需要可以考虑 MyISAM
  2. 如果表中绝大多数都只是读查询,可以考虑 MyISAM,如果既有读写也挺频繁,请用 InnoDB。
  3. 系统崩溃后,MyISAM 恢复起来更困难,如果对数据安全性要求较高的话则不推荐使用MyISAM.;
  4. MySQL5.5 版本开始 Innodb 已经成为 Mysql 的默认引擎(之前是 MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用 InnoDB,至少不会差。

6.Memory 存储引擎

  Memory 存储引擎,通过名字就很容易让人知道,他是一个将数据存储在内存中的存储引擎。Memory 存储引擎不会将任何数据存放到磁盘上,仅仅存放了一个表结构相关信息的.frm 文件在磁盘上面。所以一旦 MySQLCrash 或者主机 Crash 之后,Memory 的表就只剩下一个结构了。Memory 表支持索引,并且同时支持 Hash 和 B-Tree 两种格式的索引,但不支持全文索引。由于是存放在内存中,所以 Memory 都是按照定长的空间来存储数据的,而且不支持 BLOB 和 TEXT类型的字段。Memory 存储引擎实现页级锁定(limit)。

7.NDBCluster 存储引擎

  NDB存储引擎也叫NDBCluster存储引擎,主要用于 MySQLCluster分布式集群环境,Cluster是 MySQL 从 5.0 版本才开始提供的新功能。

8.Merge 存储引擎

  MERGE 存储引擎,在 MySQL 用户手册中也提到了,也被大家认识为 MRG_MyISAM 引擎。Why?因为 MERGE 存储引擎可以简单的理解为其功能就是实现了对结构相同的 MyISAM 表,通过一些特殊的包装对外提供一个单一的访问入口,以达到减小应用的复杂度的目的。要创建 MERGE 表,不仅仅基表的结构要完全一致,包括字段的顺序,基表的索引也必须完全一致。BDB 存储引擎BDB 存储引擎全称为 BerkeleyDB 存储引擎,和 Innodb 一样,也不是 MySQL 自己开发实现的一个存储引擎,而是由 SleepycatSoftware 所提供,当然,也是开源存储引擎,同样支持事务安全。

9.FEDERATED 存储引擎

  FEDERATED 存储引擎所实现的功能,和 Oracle 的 DBLINK 基本相似,主要用来提供对远程 MySQL 服务器上面的数据的访问接口。如果我们使用源码编译来安装 MySQL,那么必须手工指定启用 FEDERATED 存储引擎才行,因为 MySQL 默认是不起用该存储引擎的。

10.ARCHIVE 存储引擎

  ARCHIVE 存储引擎主要用于通过较小的存储空间来存放过期的很少访问的历史数据。ARCHIVE 表不支持索引,通过一个.frm 的结构定义文件,一个.ARZ 的数据压缩文件还有一个.ARM 的 meta 信息文件。由于其所存放的数据的特殊性,ARCHIVE 表不支持删除,修改操作,仅支持插入和查询操作。锁定机制为行级锁定。

11.BLACKHOLE 存储引擎

  BLACKHOLE 存储引擎是一个非常有意思的存储引擎,功能恰如其名,就是一个“黑洞”。就像我们 unix 系统下面的“/dev/null”设备一样,不管我们写入任何信息,都是有去无回。

12.CSV 存储引擎

  CSV 存储引擎实际上操作的就是一个标准的 CSV 文件,他不支持索引。起主要用途就是大家有些时候可能会需要通过数据库中的数据导出成一份报表文件,而 CSV 文件是很多软件都支持的一种较为标准的格式,所以我们可以通过先在数据库中建立一张 CSV 表,然后将生成的报表信息插入到该表,即可得到一份 CSV 报表文件了。

二、存储引擎管理

----------------------------------------------------------------

1.查看数据库支持的存储引擎

show engines

2.查看数据库当前使用的存储引擎

show variables like ‘%storage_engine%’ 也可以在 MySQL 配置文件中查看。 windows - my.ini。 Linux - my.cnf

3.查看数据库表所用的存储引擎

show create table table_name

4.创建表指定存储引擎

create table table_name (column_name column_type) engine = engine_name

5.修改表的存储引擎

alter table table_name engine=engine_name

6.修改默认的存储引擎

在 MySQL 配置文件中修改下述内容:
default-storage-engine=INNODB
MySQL 配置文件:
windows 系 统 : MySQL 安 装目 录 /my.ini (5.7 版 本 my.ini 文 件在 数 据目 录 中。
C:/programdata/MySQL Server 5.7/mysql/)
linux 系统 : /etc/my.cnf

### 回答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、付费专栏及课程。

余额充值