MySQL存储引擎

36 阅读4分钟

插件式存储引擎是 MySQL 数据库最重要的特性之一,用户可以根据应用的需要选择姐何存储和索子数据、是否使用事务等。MysQL 默认支持多种存储引擎,以适用于不同领域的数据库应用需要,用户可以通过选择使用不同的存储引擎提高应用的效率,提供灵活的存储,用户甚至可以按照自己的需要定制和使用自己的存储引擎,以实现最大程度的可定制性。

MySQL 5.0 支持的存储引擎包括 MyISAM、 InnoDB、BDB、 MEMORY、MERGE、EXAMPLE、NDB Cluster ARCHIVE、 CSV、BLACKHOLE、FEDERATED 等,其中IanoDB 和 BDB 提供事务安全表,其他存储引擎都是非事务安全表。

创建新表时如果不指定存储引擎,那么系统就会使用默以存储引擎,MySQL 5.5之前的默认存储引擎是 MyISAM,5.5之后改为厂InnoDB。如果要修改默认的存储引擎,可以在参数文件中设置 default-table-type。查看当前的默认存储引擎,可以使用以下命令:
mysql> show variables like 'table_type';

查询当前数据库支持的存储引擎:

mysql> show engines;

mysql> show variables like 'have%';

修改引擎:

mysql> alter table teat engine=innodb;

常用存储引擎对比

60f73bd5cb01ef1e5abed63416b6fc5.jpg

MyISAM MyISAM 是MySQL 默认的存储引擎。MyISAM 不支持事务、也不支持外键,其优勢是访同的速度快,対事多完整性没有要求或者以 SELECT、INSERT カ主的应用基本上都可以使用这个引擎来创建表。

每个MyISAM 在磁盘上存储成3个文件,其文件名都和表名相同,但扩展名分别是:

  • .frm(存储表定火);
  • .MYD (MYData,存储数据);
  • .MYI (MYIndex,存储索引)。

数据文件和素引文件可以放置在不同的目录,平均分布IO,获得更快的速度。
要指定索引文件和数据文件的路径,需要在创建表的时候通过 DATA DIRECTORY 和 IDEX DIRECTORY 语句指定,也就是说个同 MyISAM 表的素引文件和数据文件可以放置到不同的路径下。文件路径需要是绝对路往,并且具有访间权限。
MyISAM 类型的表可能会损坏,原因可能是多种多样的,损坏后的表可能不能被访问,会提示需要修复或者访问后返回错误的结果。MyISAM 类型的表提供修复的工具,可以用 CHECK TABLE 语旬来检查 MyISAM 表的健康, REPAIR TABLE 语句修复一个损坏的 MyISAN表。表损坏可能号致效据库异常重新启动,需要尽快修复并尽可能地确认损坏的原因。

MyISAM 的表还支持3种不同的存储格式,分别是:

  • 静态(固定长度)表;
  • 动态表;
  • 压缩表。

其中,静态表是默以的存储格式。静态表中的字段都是非变长字段,这样每个记录都是面定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空回通常比动态表多。静态表的数据在存储时会按照列的宽度定义补足空格,但是在应用访问的时候并不会得到这些空格,这些空格在返回给应用之前已经去掉。 但是也有些需要特别注意的问题,如果需要保存的内容后面本来就带有空格,那么在返回结果的时候也会被去掉,开发人员在编写程序的时候需要特别注意,因为静态表是默认的存储格式,开发人员可能并没有意识到这一点,从而丢失了尾部的空格。以下例子演示了插人的记录包含空格时处理的情况:

InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB的效率更差一些,会占用更多的磁盘空间以保留数据和索引。 下面是InnoDB表在使用过程中不同于使用其他存储引擎的表的特点。 1.自动增长列 2.外键约束 3.存储方式