简述数据库中 InnoDB 和 MyISAM 引擎

目录

1、修改默认的存储引擎

2、关于 InnoDB 引擎

InnoDB 的优势

具备外键支持功能的事务存储引擎

InnoDB 索引的 B+ 树结构:

3、关于 MyISAM 引擎

MyISQM 的优势

MyISAM  索引的数据结构

4、 InnoDB 与 MyISAM 引擎对比图


1、修改默认的存储引擎

前提说明:如果在创建表的语句中没有显式指定表的存储引擎的话,那就会默认使用 InnoDB 作为表的存储引擎。

存储引擎:它是负责对表中的数据进行提取和写入工作的,我们可以为不同的表设置不同的存储引擎, 也就是说不同的表可以有不同的物理存储结构,不同的提取和写入方式

查看表中的具体属性:(可以查看到当前使用的存储引擎)

SHOW CREATE TABLE 表名

方式一:

  如果我们想改变表的默认存储引擎的话,可以这样写启动服务器的命令行:

#例如:这里将默认的存储引擎设置为 MyISAM

SET DEFAULT_STORAGE_ENGINE = MyISAM;

方式二:

  在创建表的时候进行指定:

#在创建表时指定引擎

CREATE TABLE 表名(
   建表语句;
) ENGINE = 存储引擎名称;

方式三:

  若表已经创建好,则可以使用 alter 语法进行修改:

ALTER TABLE 表名 ENGINE = 存储引擎名称;


2、关于 InnoDB 引擎

  •  InnoDB 的优势

  1. InnoDB存储引擎在实际应用中拥有诸多优势,比如 操作便利、提高了数据库的性能、维护成本低等。如 果由于硬件或软件的原因导致服务器崩溃,那么在重启服务器之后不需要进行额外的操作。InnoDB崩溃 恢复功能自动将之前提交的内容定型,然后撤销没有提交的进程,重启之后继续从崩溃点开始执行
  2. InnoDB存储引擎在主内存中维护缓冲池,高频率使用的数据将在内存中直接被处理。这种缓存方式应用于多种信息,加速了处理进程。在专用服务器上,物理内存中高达80%的部分被应用于缓冲池。如果需要将数据插入不同的表中,可以设置外键加强数据的完整性。更新或者删除数据,关联数据将会被自动更新或删除。如果试图将数据插入从表,但在主表中没有对应的数据,插入的数据将被自动移除。如果磁盘或内存中的数据出现崩溃, 在使用脏数据之前,校验和机制会发出警告。当每个表的主键都设置合理时,与这些列有关的操作会被自动优化。插入、更新和删除操作通过做改变缓冲自动机制进行优化。 InnoDB不仅支持当前读写,也会缓冲改变的数据到数据流磁盘 
  3. InnoDB的性能优势不只存在于长时运行查询的大型表。在同一列多次被查询时,自适应哈希索引会提高查询的速度。使用InnoDB可以压缩表和相关的索引,可以在不影响性能和可用性的情况下创建或删除索引 。对于大型文本和BLOB数据,使用动态行形式,这种存储布局更高效。
  4. 通过查询 INFORMATION_SCHEMA 库中的表可以监控存储引擎的内部工作。在同一个语句中,InnoDB表可以与其他存储引擎表混用。即使有些操作系统限制文件大小为2GB,InnoDB仍然可以处理。
  5. 当处理大数据量时,InnoDB兼顾CPU,以达到最大性能 

  • 具备外键支持功能的事务存储引擎

  1. MySQL从3.23.34a开始就包含InnoDB存储引擎。 大于等于5.5之后,默认采用InnoDB引擎 
  2. InnoDB是MySQL的 默认事务型引擎 ,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)
  3. 除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎
  4. 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑 InnoDB 引擎
  5. InnoDB是 为处理巨大数据量的最大性能设计 

                                                                

  • InnoDB 索引的 B+ 树结构:

  • 这里是聚簇索引

B+ 树索引的注意事项:

  1. 根页面位置万年不动
  2. 内节点中目录项记录的唯一性
  3. 一个页面最少存储2条记录

  •  这里是二级索引(非聚簇索引)

回表:我们根据这个以c2列大小排序的B+树只能确定我们要查找记录的主键值,所以如果我们想根据c2列的值查找到完整的用户记录的话,仍然需要到 聚簇索引 中再查一遍,这个过程称为 回表 。也就是说,根据c2列的值查询一条完整的用户记录需要使用到 2 棵B+树!

缺点:

  • 对比MyISAM的存储引擎, InnoDB写的处理效率差一些 ,并且会占用更多的磁盘空间以保存数据和索引。
  • MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据对内存要求较高 ,而且内存大小对性能有决定性的影响。


3、关于 MyISAM 引擎

  • MyISQM 的优势

  1. MyISAM 提供了大量的特性,包括全文索引、压缩、空间函数(GIS) 等
  2. 访问的速度快 ,一般用于对事务完整性没有要求或者以SELECT、INSERT为主的应用
  3. 针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高

  • MyISAM  索引的数据结构

缺点:

MyISAM 不支持事务、行级 锁、外键 ,有一个毫无疑问的缺陷就是  “崩溃后无法安全恢复数据”


4、 InnoDB 与 MyISAM 引擎对比图

猜你喜欢

转载自blog.csdn.net/qq_66862911/article/details/130906583