什么是存储引擎,存储引擎说白了就是如何存储数据,如何为存储的数据建立索引和如何更新,查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以成为表类型。
在Oracle和SQL Server等数据库中只有一个存储引擎,所有的数据存储管理机制都是一样的。MySQL数据库提供了多种存储引擎,用户可以根据不同的需求为数据库表选择不同的存储引擎,也可以根据自己的需要编写自己的存储引擎。
MySQL存储引擎简介
存储引擎的概念是MySQL的特点,而且是一种插入式的存储引擎概念。这决定了MySQL数据库中的表可以用不同的方式存储。用户可以根据自己的不同要求,选择不同的存储方式、是进行事务处理等。
使用SHOw ENGINES语句可以查看MySQL数据库支持的存储引擎类型。
SHOW ENGINES \G
1. 可以在mysql.ini配置文件中修改数据库默认引擎
default-storage-engine = INNODB
InnoDB存储引擎
InnoDB 是MySQL数据库的一个存储引擎。InnoDB给MySQL的表提供了事务、回滚、崩溃修复能力、多版本并发控制的事务安全。在MySQL从 3.23.34a开始包含InnoDB存储引擎。InnoDB是MySQL上第一个提供外键约束的引擎。而且InnoDB对事务处理的能力,也是 MySQL其他存储引擎所无法与之比拟的。
(1)InnoDB存储引擎中支持自动增长列(AUTO_INCREMET)自 动增长列的值不能为空,且值必须惟一。MySQL中规定自增列必须为主键。在插入值时,如果自动增长列不输入值,则插入的值为自动增长后的值;如果输入的 值为0或者空(NULL),则插入的值也为自动增长后的值;如果插入某个确定的值,且该值在前面没有出现过,则可以直接插入。
(2) InnoDB存储引擎中支持外键(FOREIGN KEY)
(3) InnoDB存储引擎中,创建表的表结构存储在.frm文件中。数据和索引存储innodb_data_home_dir和innodb_data_file_path定义的表空间中。
(4) InnoDB存储引擎的优势在于提供良好的事务管理、崩溃修复能力和并发控制。
缺点是读写效率稍差,占用的数据空间相对比较大。
MyISAM存储引擎
MyISAM存储引擎是MySQL中常见的存储引擎,是以前MySQL的默认存储引擎。MyISAM存储引擎是基于ISAM存储引擎发展起来的。MyISAM增加了很多用的扩展。
MyISAM存储引擎的表存储成三个文件。文件的名字与表名相同。扩展名包括frm、MYD和MYI。其中frm为扩展名的文件存储表的结构;MYD为扩展名的文件存储数据,基是MYData的缩写;MYI为扩展名的文件存储索引,其是MyIndex的缩写。
MyISAM存储引擎的优势在于占用空间小、处理速度快。
缺点是不支持事务的完整性和并发性。
MEMORY存储引擎
MEMORY存储引擎是MySQL中的一个特殊的存储引擎。基使用存储在内存中内容来创建表,而且所有数据也放在内存中。这些特性都与InnoDB存储引擎、MyISAM存储引擎不同。
每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件的只存储表的结构。而其数据文件,都是存储在 内存中。这样有利于对数据的快速的处理,提高整个表的处理效率。值得注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要 使用了,可以释放这些内存,甚至可以删除不需要的表。
MEMORY表的大小是受到限制的。表的大小主要取决于两个参数,分别是max_rows和max_heap_table_size。
存储引擎的选择
在实际工作中,选择一个合适的存储引擎是一个很复杂的问题。每种存储引擎都有各自的优势,不能笼统的说谁比谁好。
InnoDB存储引擎:用于事务处理应用程序,具有众多特性
MyISAM存储引擎:主要用于管理费事务表,它提供高速存储和检索,以及全文搜索能力
MEMORY存储引擎:提供“内存中”表,MEMORY存储引擎的所有数据都在内存中,数据的处理速度快,但安全性不高(用于相对较小的数据库表)
存储引擎的对比
特性 | InnoDB | MyISAM | MEMORY |
---|---|---|---|
事务安全 | 支持 | 不支持 | 不支持 |
数据行锁定 | 支持 | 不支持 | 不支持 |
外键约束 | 支持 | 不支持 | 不支持 |
存储限制 | 64TB | 有 | 有 |
空间占用 | 高 | 低 | 低 |
全文索引 | 不支持 | 支持 | 不支持 |
内存使用 | 高 | 低 | 高 |
插入数据的速度 | 低 | 高 | 高 |
对外键的支持 | 支持 | 无 | 无 |