MySQL的存储引擎

数据库存储引擎是数据库底层软件组件。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。MySQL的核心就是存储引擎。

查看MySQL支持的引擎类型

在MySQL中,不需要在整个服务器中使用同一种存储引擎,针对具体要求,可以对每一个表使用不同的存储引擎。MySQL5.6支持的存储引擎有:InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE等。
可以使用SHOW ENGINES语句查看系统所支持的引擎类型。

Support列的值表示某种引擎是否能使用。DEFAULT为默认存储引擎。

InnoDB存储引擎

MySQL5.5.5之后,默认的存储引擎。支持事务安全表(ACID),支持行锁定和外键。
主要特性有:

  • InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。在SQL查询中,可以将InnoDB类型的表与其他MySQL的表的类型混合起来。
  • InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。
  • InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲区。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件。
  • InnoDB支持外键完整性约束。存储表中的数据时,每张表的存储都是按主键顺序存放,如果没有显示指定主键,InnoDB会为每一行生成一个隐藏的6个字节的ROWID,并以此作为主键。建议InnoDB的主键采用数据库自增策略。后期再补充InnoDB的索引

MyISAM存储引擎

MyISAM基于ISAM存储引擎,并对其进行扩展。MyISAM拥有较高的插入、查询速度,但不支持事务。在MySQL5.5.5之前的版本中,MyISAM是默认存储引擎。
主要特性有:

  • 大文件(达63位文件长度)在支持大文件的文件系统和操作系统上被支持。
  • 当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块。若下一个块被删除,就扩展下一块来自动完成。
  • 每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16个。
  • 最大的键长度是1000字节,可以通过编译来改变。对键长度超过250字节的情况,一个超过1024字节的键将被用上。
  • BLOB和TEXT列可以被索引。
  • NULL值被允许在索引的列中,这个值占每个键的0~1个字节。
  • 所有数字键值以高字节优先被存储,以允许一个更高地索引压缩。
  • 每个MyISAM类型的表都有一个AUTO_INCREMENT的内部列,当INSERT和UPDATE时,该列被更新同时被刷新。
  • 可以把数据文件和索引文件放在不同目录。
  • 每个字符列可以有不同的字符集。
  • 有VARCHAR的表可以固定或动态记录长度。
  • VARCHAR和CHAR列可以多达64KB。

Memory存储引擎

Memory存储引擎将表中的数据,存储到内存中。为查询和引用其他表数据提供快速访问。
主要特性有:

  • 每一个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度。
  • 执行哈希(Hash)索引和BTree索引。
  • 在一个Memory表中可以有非唯一键。
  • 使用一个固定的记录长度格式。
  • 不支持BLOB和TEXT列。
  • 支持AUTO_INCREMENT列、可以对包含NULL值的列建立索引。
  • 表内容被存在内存中。
  • 当不在需要表的内容时,要释放被表使用的内存,应该执行DELETE FROM或TRAUNCATE TABLE,或删除整个表(DROP TABLE)。(这里不阐述DELETE、TRAUNCATE、DROP之间的区别)

存储引擎的选择

更改数据表存储引擎

查看数据表存储引擎,使用SHOW CREATE TABLE <表名\G>,语句进查看。(“\G”是参数,使结果更加直观,易于查看)

更新数据表存储引擎,使用ALTER TABLE <表名> ENGINE=<存储引擎名>;

注意

MySQL中外键约束是用来保证数据的参照完整性,如果表之间需要关联外键,却指定了不同的存储引擎,这些表之间是不能创建外键约束的。

谢谢你请我吃糖果

--------- 本文结束,感谢您的审阅 ---------
0%