• MySQL:引擎知识点盘点


    本篇内容包括:MySQL 引擎简介、InnoDB与MyISAM存储引擎之间的比较以及其他常用引擎。

    一、MySQL 引擎简介

    存储引擎是数据库的核心,MySQL的存储引擎架构被设计为可插拔式架构模式,也就是在不影响任何业务逻辑的情况下,我们可以随时替换当前的存储引擎,以达到以存储和性能方面的需求。

    MySQL的Server层与存储引擎层通过MySQL服务器提供统一的API接口与存储引擎进行交互,Server不关心底层存储引擎的实现细节,而不同的存储引擎对数据的存储与处理、查询都有自己的实现。

    虽然mysql支持种类繁多的存储引擎,但是常用的就那么几种:MyISAM、InnoDB、MEMORY、ARCHIVE

    查看存储引擎:MySQL支持多种存储引擎,如果我们想查看自己的MySQL服务器支持多少种存储引擎,可以使用SHOW ENGINES命令进行查询,如:mysql> SHOW ENGINES;

    1、InnoDB

    InnoDB存储引擎在 MySQL5.6 版本以上被作为默认引擎,支持行级锁定、MVCC 多版本控制、非锁定读、事务、外健等特性,对事务的支持,让 MySQL 成为更加完善的数据库管理系统系统,行级锁定使 InnoDB 可以支持更大的并发数。

    一般来说,如果没有什么其他特殊的需求,InnoDB 存储引擎是使用 MySQL 创建数据表的首选。

    2、MyISAM

    在 MySQL5.1 以前,MyISAM 存储引擎是 MySQL 是默认存储引擎,MyISAM 支持表级锁定,并不支持事务,比较适合大量的select和insert操作。


    二、InnoDB与MyISAM存储引擎之间的比较

    1、事务的支持

    InnoDB 支持 ACID 的事务处理,MyISAM 并不支持事务,这里需要注意,如果我们在程序需要进行事务处理,所有的数据都要使用Innodb存储引擎,如果中间有MyISAM存储引擎的数据表,如果进行事务回滚,MyISAM并不会回滚到之前的状态,因此MyISAM不支持事务。

    2、索引与主键处理

    InnoDB 存储引擎使用的是聚集索引,InnoDB 主键的叶子节点是该行的数据,而其他索引则指向主键,而 MyISAM 存储引擎使用的是非聚集索引,主键与其他索引的叶子节点都存储了指向数据的指针。

    另外一个是MyISAM数据表允许没有主键和其他索引,而InnoDB数据表如果没有主键的话,而会生成一个用户不可见6字节的主键。

    3、外键

    MyISAM不支持外键,而Innodb则支持建立数据表之间的外键关联。

    4、存储文件的不同

    Innodb 存储文件有 frm、ibd,而 MyISAM 是 frm、MYD、MYI,Innodb 存储文件中 frm 是数据表结构定义文件,ibd 是数据文件,MyISAM中frm是数据表结构定义文件,MYD是数据的文件,MYI则是存储索引的文件。

    5、select count(*)

    使用 MyISAM 存储引擎的数据表会记录一个数据表的总行数,所以对使用MyISAM存储引擎的数据表进行select count(*),可以很快得到一个数据表的总行数,而对于InnoDB存储引擎的数据表,想要查询总行数需要进行全表扫描才能得到。

    6、锁的级别

    InnoDB 支持行级锁,而 MyISAM 只支持表级锁,因此 InnoDB 更能支持高并发。


    三、其他常用引擎

    1、MEMORY

    MEMORY:使用 MEMORY 引擎主要是因为速度,好处就在 MEMORY 采用的逻辑存储是系统内存,极大的提高了储存数据表的性能;

    坏处就是当 mysqld 守护进程崩溃时,所有的 Memory 数据都会丢失。

    要求存储在 Memory 数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型

    所以一般在以下几种情况下使用Memory存储引擎:

    1. 目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数 max_heap_table_size 控制 Memory 表的大小,设置此参数,就可以限制 Memory 表的最大大小。

    2. 如果数据是临时的,而且必须立即使用,那么就可以存放在内存表中。

    3. 存储在 Memory 表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。

    Memory 同时支持散列索引和B树索引。B树索引的优于散列索引的是,可以使用部分查询和通配查询,也可以使用<、>和>=等操作符方便数据挖掘。散列索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了,因此散列索引值适合使用在=和<>的操作符中,不适合在<或>操作符中,也同样不适合用在 order by 子句中

    2、MERGE

    MERGE 存储引擎是一组 MyISAM 表的组合,这些 MyISAM 表结构必须完全相同,所以就相当于一个集合器。比起其他储存引擎MERGE 不是很优秀,但是在某些情况下 MERGE 还是非常的有用。对于服务器日志这种信息,一般常用的存储策略是将数据分成很多表,每个名称与特定的时间端相关。

    3、ARCHIVE

    Archive 是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的插入和查询两种功能。在 MySQL 5.5 版以前,Archive 是不支持索引,但是在 MySQL 5.5 以后的版本就开始支持索引了。Archive 拥有很好的压缩机制,它使用 zlib 压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。

  • 相关阅读:
    Week 1 Introduction to NLP and Language Modelling
    【DevOps】OpenVPN 实现分流的几种方法和实战
    使用 TiUP 部署运维 TiDB 线上集群
    如何使用 AI与人工智能的定义、研究价值、发展阶段
    mysql字符串函数
    DAC的简单应用
    AWS创建实例 启用/禁用 自动分配公有 IP
    国产高精度比较器MS762/M、MS761 对标SGM8742YMS8
    使用eXplorer本地搭建免费在线文件管理器并实现远程登录——“cpolar内网穿透”
    【Web_环境搭建_Python3_pip】pip的升级、安装、更新、卸载,以及pipupgrade和pip-review的基础使用
  • 原文地址:https://blog.csdn.net/weixin_45187434/article/details/127434127