存储引擎

存储引擎

notion image
Feature
MyISAM
Memory
InnoDB
Archive
NDB
Yes
Yes
Yes
No
No
Yes (note 2)
No
Yes
Yes
No
Yes (note 3)
Yes (note 3)
Yes (note 4)
Yes (note 3)
Yes (note 3)
No
No
Yes
No
Yes (note 5)
Yes
No
Yes (note 6)
No
No
Yes
No
Yes (note 7)
No
No
No
Yes
No (note 8)
No
Yes
Yes
N/A
Yes
No
Yes
Table
Table
Row
Row
Row
No
No
Yes
No
No
Yes
Limited (note 9)
Yes
Yes
Yes
256TB
RAM
64TB
None
384EB
No
No
No
No
Yes
No
No
Yes
No
Yes

MyISAM引擎特点

  • 不支持事务
  • 表级锁定
  • 读写相互阻塞,写入不能读,读时不能写
  • 只缓存索引
  • 不支持外键约束
  • 不支持聚簇索引
  • 读取数据较快,占用资源较少
  • 不支持MVCC(多版本并发控制机制)高并发
  • 崩溃恢复性较差
  • MySQL5.5.5前默认的数据库引擎
  • MyISAM存储引擎适用场景 只读(或者写较少)、表较小(可以接受长时间进行修复操作)
  • MyISAM引擎文件 tbl\_name.frm 表格式定义 tbl\_name.MYD 数据文件 tbl\_name.MYI 索引文件

InnoDB引擎特点

  • 行级锁
  • 支持事务,适合处理大量短期事务
  • 读写阻塞与事务隔离级别相关
  • 可缓存数据和索引
  • 支持聚簇索引
  • 崩溃恢复性更好
  • 支持MVCC高并发
  • 从MySQL5.5后支持全文索引
  • 从MySQL5.5.5开始为默认的数据库引擎
  • InnoDB数据库文件
    • 所有InnoDB表的数据和索引放置于同一个表空间中 表空间文件:datadir定义的目录下 数据文件:ibddata1, ibddata2
    • 每个表单独使用一个表空间存储表的数据和索引 启用:innodb\_file\_per\_table=ON 参考:https://mariadb.com/kb/en/library/xtradbinnodb-server-system-variables/#innodb\\_file\\_per\\_table ON (>= MariaDB 5.5) 两类文件放在数据库独立目录中 数据文件(存储数据和索引):tb\_name.ibd 表格式定义:tb\_name.frm

其它存储引擎

  • Performance\_Schema:Performance\_Schema数据库使用
  • Memory :将所有数据存储在RAM中,以便在需要快速查找参考和其他类似数据的环境中进行快速访问。适用存放临时数据。引擎以前被称为HEAP引擎
  • MRG\_MyISAM:使MySQL DBA或开发人员能够对一系列相同的MyISAM表进行逻辑分组,并将它们作为一个对象引用。适用于VLDB(Very Large DataBase)环境,如数据仓库
  • Archive :为存储和检索大量很少参考的存档或安全审核信息,只支持SELECT和INSERT操作;支持行级锁和专用缓存区
  • Federated联合:用于访问其它远程MySQL服务器一个代理,它通过创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,而后完成数据存取,提供链接单独MySQL服务器的能力,以便从多个物理服务器创建一个逻辑数据库。非常适合分布式或数据集市环境
  • BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性
  • Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性
  • CSV:CSV存储引擎使用逗号分隔值格式将数据存储在文本文件中。可以使用CSV引擎以CSV格式导入和导出其他软件和应用程序之间的数据交换
  • BLACKHOLE :黑洞存储引擎接受但不存储数据,检索总是返回一个空集。该功能可用于分布式数据库设计,数据自动复制,但不是本地存储 (从内存直接复制,效率高,若断电了,会有安全隐患)
  • example:“stub”引擎,它什么都不做。可以使用此引擎创建表,但不能将数据存储在其中或从中检索。目的是作为例子来说明如何开始编写新的存储引擎

MariaDB支持的其它存储引擎:

  • OQGraph
  • SphinxSE
  • TokuDB
  • Cassandra
  • CONNECT
  • SQUENCE

管理存储引擎

查看mysql支持的存储引擎
查看当前默认的存储引擎
设置默认的存储引擎
查看库中所有表使用的存储引擎
查看库中指定表的存储引擎
设置表的存储引擎:
列出连接列表
mysql 命令历史,会保存在用户家目录mysql\_history,此文件是隐藏的

小结

MVCC 多版本并发控制 事务ID之前之后的数据 插入或修改数据 若事务ID在我之后,不应该被看到
transaction 事务,一个或多个SQL构成 事务原子性 完整性,不可分割,要么全做,要么不做 当机器发生宕机 1、update 2、delete 比如在第二步,会rollback 撤消 3、insert 若删除,数据应该看到事务ID的值 支持高并发
centos6与centos上面的innodb 是不同的 开发商不同,特性基本差不多 默认使用myisam,不建议使用,测试数据库无所谓
innodb 建议数据存在单个文件,不要存放在默认文件位置,单个文件,影响效率和安全性 过程中的修改数据不应该被 看到,应该做隔离 新版本不用加,默认值是开启的,旧版本,则需要手动修改 vim /etc/my.cnf innodb\_file\_per\_table
myisam数据和表是分开放的:tbname.MYI 存放索引、tbname.MYD 存放数据、tbname.frm表结构 innodb表和索引是存放在:tbname.idb 存放数据和索引、tbname.frm表结构
myisam innodb 存储引擎的区别
特征
MyISAM
Innodb
不支持数据缓存在内存中
支持
不支持
支持
支持
innodb 5.6版本以上才支持
支持表锁
innodb 行锁
加锁会影响并发,并发很差 行加锁,并发会好点

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 438803792@qq.com
Loading...