最近一直在看mysql数据库,刚好看到存储引擎这一块,加深了对myisam存储引擎和innodb存储引擎的理解。现在来总结下两种存储引擎的差异。
所谓存储引擎就是mysql中存储对象(记录和索引)的一种特定的文件结构。存储引擎位于mysql服务器的最底层,直接存储数据。mysql上层的操作依赖于存储引擎的选择. 这样的概念很抽象,有些晦涩,现在让我们通过实际例子来分析两种存储引擎的差异.
打开mysql客户端,输入 show engines\G 可以查阅mysql支持的存储引擎列表。
现在来具体查看下innodb存储引擎的具体描述:
自从mysql5.5版本以来,innodb成为mysql的默认存储引擎,这里的描述很清晰的描述了innodb引擎的特点,支持事务,行锁,和外键。这是一种事务安全型的存储引擎,注重数据的安全性和完整性。
innodb的数据存储格式是数据和索引文件存储在一个表空间内。innodb表的存储文件是由.frm (表结构文件)和表空间文件组成。因为innodb插入数据时要做排序工作,所以插入的效率不高。innodb在处理并发时,有较大优势,支持行锁,很好的实现了多版本并发控制。
看了上面的解释,大家应该对innodb存储引擎有了一定的了解,下面来说下myisam存储引擎。myisam表在数据存储方式上,数据和索引是分开存储的,主要是由.frm, .myd(数据文件), myi (索引文件)组成,查询和插入的效率较高,在做插入操作时不做排序,但是只支持表锁,在并发性支持上不如innodb。同时有一个致命性的缺陷,不支持事务,在遇到数据库崩溃的情况下,很难恢复。
看了以上对两种存储引擎的描述,想必大家对两种存储引擎有了一定的了解,两种存储引擎各有优势利弊,但总的来说推荐大家使用innodb存储引擎,在遇到数据库奔溃的情况下能更好的恢复数据,保证生产环境比较稳定的运行。