Mysql数据库3种存储引擎有什么区别?


Mysql数据库3种存储引擎有什么区别?

文章插图
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,在创建外键的时候,父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引 。
BDE(BorlandDatabaseEngine)是Inprise公司的数据库引擎 。
这个术语与其他所有缩写相似,因为它也可以代表许多其他东西 。
它可以代表的一些其他事情是“初学者司机教育”,“批量数据加密”,“基本数据输入”,“总线驱动器错误”和“基本设计工程” 。
数据库引擎是用于存储、处理和保护数据的核心服务 。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求 。
【Mysql数据库3种存储引擎有什么区别?】建立索引可以加快查询速度,索引就好比是图书馆中的卡片 。

    推荐阅读