在总结之前需要了解几个概念。
1.什么是数据库引擎?
数据库引擎是数据库系统中的核心组件之一,负责实现数据库的存储、索引、事务和并发控制等方面的功能。这些功能的实现依赖于各种算法、数据结构和技术,并通过数据备份和恢复来保证数据的可靠性和持久性。不同的数据库引擎有不同的特点,针对自己的项目选择适合的数据库引擎可以有效改善服务器端存储性能。
2.MySQL的数据库引擎有哪些?
Mysql常用的数据库存储引擎有MyISAM、InnoDB、DBD(Berkeley DB)、Merge、Memory(Heap)、Example、Federated等。MySQL 5.5以后的版本开始将InnoDB作为默认的存储引擎,之前的版本都是MyISAM。下面主要介绍InnoDB和MyISAM。
-
InnoDB引擎
用于事务处理应用程序,支持外键,支持自动增加列属性auto_increment。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据一致性,数据操作除了插入和查询以外,还包括很多的更新删除操作,则InnoDB比较合适。InnoDB存储引擎除了能有效地降低由于删除和更新操作导致的锁定,还可以确保事务的完整提交和回滚,可以通过bin-log日志等从灾难中恢复数据。
-
MyIsam引擎
默认的Mysql插件式存储引擎,MySQL主流引擎之一。它相比起InnoDB,没有提供对数据库事务的支持,不支持细粒度的锁(行锁)及外键,如果应用是以读写操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么可选用此种存储引擎。
3.InnoDB和MyISAM二者之间的区别?
1、数据的存储结构不同。
MyISAM的索引和数据是分开存储的,因此索引查找的时候,MyISAM的叶子节点存储的是数据所在的地址,而不是数据,而InnoDB叶子节点存储的是整个数据行所有的数据。
2、对事务的支持不同。
MyISAM强调的是性能,每次查询具有原子性,其执行速度比Innodb类型更快,但是不提供事务支持。InnoDB除了提供事务支持和外部键等高级数据库功能。还具有事务提交(commit)、回滚(rollback)和崩溃修复能力(crach recovery capabilities)等这些事务安全(transaction-safe ACID compliant)型表。
3、存储空间的消耗不同。
MyISAM可以被压缩,存储空间较小。支持静态表、动态表和压缩表。Innodb需要更多的内存和存储,它会在主内存中建立其专用的缓冲池,用于提高缓冲数据和索引。InnoDB所在的表都保存在同一个数据文件中。
4、对锁的支持不同。
MyISAM适合进行大量的查询,因为它在增删的时候需要锁定整个表,效率会降低。而InnoDB支持行级锁,插入和删除只需要锁定操作行即可。如果有大量的插入、修改和删除操作,使用InnoDB性能会更高,但是InnoDB没有保存表的行数,在执行select count(*) from 表名时,需要遍历扫描全表。
5、对外键的支持不同。
MyISAM不支持外键,而InoDB支持外键。
如何选择是使用MyISAM还是InoDB呢?
1、如果需要支持事务,选择InnoDB,不需要事务则选择MyISAM。
2、如果大部分表操作都是查询,选择MyISAM,有写又有读选InnoDB。
3、如果系统崩溃导致数据难以恢复,且成本高,不要选择MyISAM。