当前位置: 首页 > article >正文

Mysql中的引擎介绍(InnoDB,MyISAM,Memory)

MySQL引擎就是指表的类型以及表在计算机上的存储方式。
MySQL数据库及其分支版本主要的存储引擎有三种,分别是
InnoDB、MyISAM、 Memory,还有一些其他的,CSV、Blackhole等,比较少见,可以使用SHOW ENGINES语句来查看。结果如下:
在这里插入图片描述
在Support列中,YES表示当前版本支持这个存储引擎;DEFAULT表示该引擎是默认的引擎,我的这个MySQL默认是InnoDB,大家可以查下自己的数据库,也是InnoDB。
存储引擎的概念是MySQL的特色,使用的是一个可插拔存储引擎架构,能够在运行的时候动态加载或者卸载这些存储引擎。不同的存储引擎决定了MySQL数据库中的表可以用不同的方式来存储。

InnoDB存储引擎

  1. InnoDB是事务型数据库的首选引擎,支持事务ACID,简单地说就是支持事务完整性、一致性。
  2. InnoDB支持行级锁。行级锁可以在最大程度上支持并发,以及类似Oracle的一致性读、多用户并发。
  3. InnoDB是为处理巨大数据量的最大性能设计,InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。
  4. InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按照主键顺序存放,如果没有显式在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键。
  5. InnoDB支持崩溃数据自修复。InnoDB存储引擎中就是依靠redolog来保证的。当数据库异常崩溃后,数据库重新启动时会根据redolog进行数据恢复,保证数据库恢复到崩溃前的状态。

MyISAM存储引擎

  1. MyISAM存储引擎不支持事务,所以对事务有要求的业务场景不能使用。
  2. 其锁定机制是表级索引,虽然可以让锁定的实现成本很小,但是也同时大大降低了其并发性能。
  3. 不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读。
  4. 只会缓存索引:MyISAM可以通过key_buffer缓存,以大大提高访问性能减少磁盘I/O,但是这个缓冲区只会缓存索引,而不会缓存数据。
  5. 适用于不需要事务支持(不支持)、并发相对较低(锁定机制问题)、数据修改相对较少(阻塞问题)、以读为主这类场景。

MEMORY存储引擎

MEMORY存储引擎是MySQL中的一类特殊存储引擎,使用存储在内存中的内容来创建表,而且所有数据也放在内存中。

  1. 每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构,数据文件则存储在内存中。
  2. MEMORY默认使用哈希索引,速度比使用B型树索引快。如果想用B型树索引,可以在创建索引时指定。
  3. MEMORY存储引擎是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,那么所有数据都会消失。
    在实际工作中,选择一个合适的存储引擎是比较复杂的问题。每种存储引擎都有自己的优缺点,不能笼统地说谁比谁好。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那么选择InnoDB有很大的优势。如果表主要是用于插入记录和读出记录,那么选择MyISAM能实现处理高效率。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMORY,它对表的大小有要求,不能建立太大的表。

修改存储引擎

明白了这些,如果有些场景需要优化数据库,就得修改一下存储引擎,那看下怎么修改

SHOW TABLE STATUS

可以看到当前的表使用的是那种引擎
在这里插入图片描述可以使用where条件找到要修改的表的信息。
然后使用这条sql去执行

ALTER TABLE tablename ENGINE=MEMORY

执行完再回查一下,确认执行成功。
MySQL的逻辑结构:
在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/153519.html

相关文章:

  • C# 使用PanGu分词
  • 使用MD5当做文件的唯一标识,这样安全么?
  • Redis 基本命令—— 超详细操作演示!!!
  • 【算法刷题】Day9
  • 使用visual Studio MFC 平台实现对灰度图添加椒盐噪声,并进行均值滤波与中值滤波
  • 快速筛出EXCEL行中的重复项
  • [NOIP2002 普及组] 过河卒
  • 数据结构—二叉树
  • python+pytest接口自动化(2)-HTTP协议基础
  • Selenium+Python自动化测试之验证码处理
  • CentOS 7 配置tomcat
  • 兼容jlink OB arm仿真器使用(杜邦线过长导致烧写总是失败)
  • 五、关闭三台虚拟机的防火墙和Selinux
  • Tomcat 漏洞修复
  • LC.1094. 拼车(差分)
  • 面试篇spark(spark core,spark sql,spark 优化)
  • 前端学习笔记
  • CSS 多主题切换思路
  • Redis主从复制实现RCE
  • IP地理定位技术的服务内容详解