Mysql数据库3种存储(MyISAM、MEMORY、InnoDB)引擎区别:
1、Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。MEMORY、InnoDB不是默认存储引擎。
2、InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
Mysql数据库3种存储(MyISAM、MEMORY、InnoDB)区别对比:
1、MyISAM
它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
数据文件和索引文件可以放置在不同的目录,平均分配IO,获取更快的速度。要指定数据文件和索引文件的路径,需要在创建表的时候通过DATA DIRECTORY和INDEX DIRECTORY语句指定,文件路径需要使用绝对路径。
2、MEMORY
memory使用存在内存中的内容来创建表。每个MEMORY表实际对应一个磁盘文件,格式是.frm。MEMORY类型的表访问非常快,因为它到数据是放在内存中的,并且默认使用HASH索引,但是一旦服务器关闭,表中的数据就会丢失,但表还会继续存在。
默认情况下,memory数据表使用散列索引,利用这种索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了。因此,散列索引值适合使用在"="和"<=>"的 *** 作符中,不适合使用在"<"或">" *** 作符中,也同样不适合用在order by字句里。如果确实要使用"<"或">"或betwen *** 作符,可以使用btree索引来加快速度。
存储在MEMORY数据表里的数据行使用的是长度不变的格式,因此加快处理速度,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型。VARCHAR是一种长度可变的类型,但因为它在MySQL内部当作长度固定不变的CHAR类型,所以可以使用。
3、InnoDB
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
(1)自动增长列:
InnoDB表的自动增长列可以手工插入,但是插入的如果是空或0,则实际插入到则是自动增长后到值。可以通过"ALTER TABLE...AUTO_INCREMENT=n"语句强制设置自动增长值的起始值,默认为1,但是该强制到默认值是保存在内存中,数据库重启后该值将会丢失。
可以使用LAST_INSERT_ID()查询当前线程最后插入记录使用的值。如果一次插入多条记录,那么返回的是第一条记录使用的自动增长值。对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列,但是对于MyISAM表,自动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引到前面几列排序后递增的。
(2)外键约束:
MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。
常见的存储引擎种类
MySQL的存储引擎有好多种,其中常见的有INNODB、MyISAM、MEMORY,它们各有自已的特点及适用性,在实际中应结合应用需要来进行选择。
1. MyISAM
MyISAM是MySQL中常见的存储引擎,它曾是MySQL的默认存储引擎。它的特点是:不支持事务、也不支持外键,但访问速度比较快,占用空间小,在对事务没有太多要求仅供访问的表中适合用此种引擎。
MyISAM存储引擎的表存储成三个文件。文件的名字与表名相同。扩展名包括frm、MYD 和MYI。其中,frm为扩展名的文件存储表的结构;MYD为扩展名的文件存储数据,其是MYData的缩写;MYI为扩展名的文件存储索引,其是MYIndex的缩写。
基于MyISAM存储引擎的表支持三种不同的存储格式:静态、动态和压缩。其中前两个(静态格式和动态格式)根据正使用的列的类型(是否使用xBLOB、xTEXT、varchar)来自动选择;第三个,即已压缩格式,只能使用myisampack工具来创建。
2. INNODB
MySQL从 3.23.34a 开始包含 InnoDB 存储引擎。InnoDB具有较强的事务处理能力及较好的事务安全性并且支持外键。它给MySQL的表提供了事务提交、回滚、崩溃修复能力、还能够实现并发控制下的事务安全,在需要频繁的更新、删除 *** 作并要求事务完整性的情况下应该选择该种存储引擎。
这种引擎不足之处是读写效率稍差,占用数据空间相对较大。
3. MEMORY
MEMORY存储引擎是MySQL中的一类特殊的存储引擎,它使用存储在内存中的内容来创建表,而且所有数据也放在内存中。其特点是访问速度快,但安全上没有保障,适用应用中涉及数据比较小、需要进行快速访问的场合。
每个基于MEMORY存储引擎的表实际对应一个磁盘文件,该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中。这样有利于对数据的快速的处理,提高整个表的处理效率。值得注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要使用了,可以释放这些内存,甚至可以删除不需要的表。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)