存储引擎是mysql数据库最重要的特性之一,用户可以根据自身需求选择合适的存储引擎,例如:是否支持事务、批量插入速度、行级锁或者表级锁等相关特性。mysql默认支持很多种不同的存储引擎,用户在创建表的时候根据表的作用可以指定不同的存储引擎。
在mysql5.5之前默认存储引擎都是MyISAM,5.5版本之后默认是InnoDB.
下面介绍几种常见的存储引擎:
1、MyISAM
MyISAM不支持事务,也不支持外键,当然现在虽然外键用的很少,由于不支持事务,所以访问速度相当的快,批量插入的数据也非常快。每创建一张表会在磁盘上生成3个文件,分别为:xx.frm(存放元信息)、xx.MYD(存放数据)、xx.MYIndex(存放索引),用户可以在创建表的时候指定索引或者数据存放路径。
MyISAM类型的表可能会损坏,损坏后的表不能被访问,但是可以修复后继续访问。
MyISAM支持三种类型的表:
静态表:默认创建都是静态表,表中字段长度都是固定的,所以访问速度非常快,缺点就是会占用稍微多的磁盘大小。需要注意:5.7版本以后静态表中如果保存字段最后面带有空格,返回数据时不会删除空格。
动态表:保存字段长度不是固定的,所以占用空间小,但是频繁的删除或者更新数据会产生碎片,所以需要定期执行 OPTIMIZE TABLE 清理碎片。
压缩表:压缩表由myisampack工具创建,占据非常小空间。因为每条记录都是被单独压缩的,所以访问开支非常小。
2、InnoDB
此存储引擎是我们目前用的最多的,支持事务、行级锁、外键等等特性,插入速度相对于MyISAM慢一点,但无伤大雅,它的自动增长列可以手动指定,它的存储方式为:元信息任然保留在xx.frm文件中,数据和索引保存在.idb中。
不支持hash索引、全文索引和数据压缩。
3、MEMORY
顾名思义,memory存储引擎是将数据存放在内存当中的,这种做法也只有特殊情况下会使用到,比如为了做统计而生成一个临时表存放数据,这样直接从内存中获取数据速度相当快。
memory存储引擎默认使用的是HASH索引,MyISAM和InnoDB使用的是BTREE索引。
对储存引擎为memory的表进行操作是要谨慎,毕竟数据全部在内存中,所以当重启数据库时必须先进行备份数据。
4、MERGE
此存储引擎实际上是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,MERGE表本身没有数据,对MERGE类型的表进行查询、更新、删除等操作实际上是对内部的MyISAM表进行操作。例如两个表分别为test01和test02,表结构完全相同,他们可以组成一个存储引擎为MERGE的表test,查询test数据时,则是两个表数据的集合。
mysql在不断的发展优化的过程中支持分表等特性后,此类存储引擎用的越来越少。
网友评论