存储引擎是MySQL的一大特色,学习MySQL必须要了解它,知其各种engines的差异,怎样正确的选择与使用之。因此简要介之。
1. 查看系统所支持的引擎类型,如截图中的命令。
2. 设定系统使用一个指定的存储引擎
有很多方法指定一个要使用的存储引擎。比较简单的方法是在MySQL配置文件中my.ini或my.cnf中设置一个默认的引擎类型,比如使用default_storage_engine=innodb 选项;或在启动数据库服务器时在命令行后面加上--default-storage-engine=innodb或--default-table-type=innodb选项。
较灵活的方式是在MySQL客户端连接MySQL服务器时时指定使用的存储引擎,比如mysql -h192.168.1.88 -uroot -p123456 --default-storage-engine=innodb。
比较实用的方式是改变现有的表使用的存储引擎,比如 alter table mytable ENGINE=MyISAM;但是千万注意:这种方式修改表类型的时候,由于引擎不支持同样的索引、字段类型或者表的大小等问题,可能造成数据丢失。如果指定一个在当前的数据库中不存在的一个存储引擎,那么就会创建一个MyISAM(默认的)类型的表。
3. 存储引擎的特性简介
a. InnoDB是唯一的事务安全表,有提交、回滚和崩溃恢复能力;它支持外键;但是它的锁是行锁,使得加锁时,资源占用相对高,而且容易发生死锁。另外InnoDB的写效率差一些,并且会占用更多的磁盘空间以保留数据和索引。InnoDB存储方式为两种:一是使用共享表空间存储,二是使用独立表空间。InnoDB默认情况下的事务是打开的,就是说每插入一条记录时候,InnoDB类型的表都会把它当作一个单独的事务来处理。所以如果我们插入了10000条记录,而且没有将事务关闭,那么InnoDB类型的表会把它当作10000个事务来处理,此时插入的总时间是很多的,这个时候一定要首先把事务关掉再插入(set autocommit=0),这样的速度就很快了。
b. MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。它的锁是表锁,占用资源低,也不会发生死锁。每一个MyISAM表都对应于硬盘上的三个文件。这三个文件有一样的文件名,但是有不同的扩展名以指示其类型用途:
.frm文件保存表的定义,但是这个文件并不是MyISAM引擎的一部分,而是服务器的一部分;
.MYD保存表的数据;
.MYI是表的索引文件。
c. MEMORY存储引擎将表的数据存储在内存中,每个MEMORY表只实际对应一个.frm磁盘文件,里面是表的定义。MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH索引。但是一旦服务关闭,表中的数据就会丢失掉。
d. MERGE存储引擎是一组MyISAM表的组合,它能将你指定的一堆表MyISAM表在逻辑上组合成一张表,前提是这些MyISAM表必须结构完全相同。MERGE表本身没有数据,对MERGE类型的表进行查询、更新、删除的操作,就是对内部的MyISAM表进行的。
实际业务中InnoDB与MyISAM用得相对的多些,选择那个中engine需要根据实际情况而定。以上是我对MySQL存储引擎的简单的认识。还有很多存储引擎,只是不常用。这里就不做介绍了。
REMARK: IT随笔,若转载请注明出去,谢谢!
Author: TerryXia