MySQL中的引擎

什么是存储引擎

MySQL中的数据用各种不同的技术存储在文件中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平、并且最终提供广泛的不同功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎

在Oracle和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。
而MySQL数据库提供了多种存储引擎。用户可以预先设置或者在MySQL服务器中启用。也可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息,如何检索这些信息以及所需要的数据结合什么样的性能和功能的时候提供了最大的灵活性。

存储引擎说白了就是如何存储数据,如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储时以表的形式存储的,所以孙处引擎也可以称为表类型(即存储和操作此表的类型)

执行引擎相关的操作

  1. 查看数据库支持的引擎
SHOW ENGINES;

MySQL中的引擎_第1张图片

  1. 查看某个表的执行引擎
    在MySQL中每张表都可以使用不同的引擎。
SHOW TABLE STATUS LIKE '表名';

举例:

SHOW TABLE STATUS LIKE 'student'

在这里插入图片描述

  1. 修改执行引擎

方式 1:将 mysql.ini 中 default-storage-engine=InnoDB,重启服务。
方式 2:建表时指定 CREATE TABLE 表名(…)ENGINE=MYISAM。
方式 3:建表后修改 ALTER TABLE 表名 ENGINE = INNODB。

存储引擎的分类

存储引擎主要有:MyISAM 、InnoDB、MEMORY、BLACKHOLE、CSV、PERFORMANCE_SCHEMA、ARCHIVE、FEDERATED、MRG_MYISAM。

功能 MyISAM InnoDB MEMORY ARCHIVE
存储限制 256TB 64TB RAM None
支持事务 NO YES NO NO
支持全文搜索 YES YES NO NO
支持数搜索 YES YES YES NO
支持哈希搜索 NO NO YES NO
支持数据缓存 NO YES N/A NO
支持外键 NO YES NO NO

在这我们主要分析InnoDB和MyIsam这两款存储引擎。

InnoDB

InnoDB是MySQL默认的存储引擎。

它是一个事务型的存储引擎,有行级锁和外键约束,支持全文检索(全文索引),它的设计目标就是为了处理大容量数据库系统。

InnoDB的表存储只生成一个文件,
MySQL中的引擎_第2张图片

MySQL运行时InnoDB会在内存中建立缓冲池,用于缓冲数据和索引;支持主键自增和外键;不存储表的总行数。

InnoDB给MySQL的表提供了事务处理、回滚、奔溃修复能力和多版本并发控制的事务安全,它也是MySQL上第一个提供外键约束的表引擎。而且InnoDB对事务的处理能力,也是其他存储引擎不能比拟的。

优点:
就在于它提供了良好的事务处理,奔溃修复和并发控制。

缺点:
读写效率差,占用的数据空间相对比较大。

MyISAM

它也是MySQL常见的存储引擎,曾经是MySQL的默认存储引擎。MyISAM是基于ISAM引擎发展起来的,增加了许多有用的扩展。

MyISAM的表存储有3个文件。
MySQL中的引擎_第3张图片

文件的名字与表名都一样。扩展名分别是MYD、MYI、sdi。
在MYD中存储文件的数据。
在MYI中存储文件的索引。
在sdi中存储表的结构。

基于MyISAM存储引擎的表支持3中不同的粗出格式。包括静态型,动态型和压缩型。其中,静态型是MyISAM的默认存储格式,它的字段是固定长度的;动态型包括变长字段,记录的长度不是固定的;压缩型需要用到myisampack工具,占用的磁盘空间较小。

MyISAM的优势就在于占用空间小,查询处理速度快。缺点就是不支持事务的完整性和并发性,INSERT(插入)或UPDATE(更新)数据时需要锁定整个表,效率更低眼底下。


二者对比:

对比项 MyISAM InnoDB
主外键 不支持 支持
事务 不支持 支持
行表锁 表锁,即使操作一条记录也会锁住整个表,不支持高并发的操作 行锁,操作时只锁某一行,不对其它行有影响。适合高并发操作
缓存 值缓存索引,不缓存真实数据 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性影响
表空间
关注点 性能 事务

上一篇:===》 MySQL的架构体系

你可能感兴趣的:(mysql,mysql,开发语言,数据库)