MySQL存储引擎认识

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL存储引擎认识相关的知识,希望对你有一定的参考价值。

存储引擎是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

 

以上是关于MySQL存储引擎认识的主要内容,如果未能解决你的问题,请参考以下文章

MySQL简单介绍——换个角度认识MySQL

对MySQL调优的认识和理解

菜鸟崛起 DB Chapter 4 MySQL 5.6的数据库引擎

组复制要求和限制 | 全方位认识 MySQL 8.0 Group Replication

重新学习MySQL数据库3:Mysql存储引擎与数据存储原理

MySQL技术内幕:InnoDB存储引擎的目录