MySQL入门教程(10)存储引擎与数据结构说明
一、MySQL存储引擎介绍
数据库存储引擎可以理解为是数据库的文件系统,MySQL主要存储引擎有MyISAM、InnoDB、Memory、TokuDB、CSV等。存储引擎位于表级别,通过不同的存储引擎来定义表的文件类型。不同的存储引擎所创建出来的表,其文件格式是不相同的,也就是说可以为每张表设置不同的存储引擎进行使用。
· MyISAM
MySQL 5.5.5之前默认的存储引擎,其优势是访问速度快,适合对事务完整性没有要求或者以查询、新增为主的场景。针对数据统计有额外的常数存储,所以执行count(*)的效率非常高。数据存放在.frm、.MYD、.MYI三种类型的文件中,可以直接拷贝表文件到其他数据库中进行使用。由于是表级锁、不支持行锁、不支持热备、不支持事务等原因已经少使用。
· InnoDB
MySQL中唯一支持事务的存储引擎,MySQL 5.5版本以后默认存储引擎,除非有特别的原因否则都应该优先考虑使用InnoDB存储引擎。InnoDb最主要的特性就是支持事务,实现MVCC(多版本并发控制)、聚簇索引、行级锁、热备等特性。
在 Innodb 存储引擎中将数据分为了行、页、区、段多个层次进行管理,行是记录数据的基本单元,每一行存储在数据页中,而多个页组成一个区,用于分配大块连续的存储空间,提升数据读取效率。最后将多个区组成一个段,用来管理表或索引的数据。InnoDB相比MyISAM会需要更多的空间来存放索引数据和索引,在仅增加和查询的场景下,性能比MyISAM稍微逊色。
InnoDB存储引擎下的表结构存放于.frm文件,数据和索引存放在.ibd文件中。从 MySQL 5.6 开始,默认启用了独立表空间,每张表都有一个独立的.ibd文件,但由于InnoDB还依赖共享表空间文件ibdata1文件来存放undo log、依赖ib_logfile文件存放redo log,所以不能直接拷贝.ibd文件到其他实例中使用。
· MEMROY
数据存放在内存中,速度非常快,但是不进行持久化处理,如果数据库重启或者崩溃,只会保存表结构(因为有.frm文件),数据会丢失,适用于存储临时数据
· CSV
数据以文本形式进行存放,可以直接编辑,但是由于不支持索引,所以不适合OLTP应用(因为所有SQL都是全表扫描)
· TokuDB
压缩比可以达到25倍,对数据的插入和删除速度也很快。适用于有大量插入或者删除操作的场景,如Zabbix
· Archive
适合于存储归档数据,如日志信息。数据使用zlib压缩,同样数据量下,其大小约是InnoDB表的五分之一。该存储引擎只支持插入和查询操作,插入速度快,但是不支持索引,所以查询性能差
二、MySQL存储引擎管理
1、查看当前实例支持的存储引擎
#查看当前MySQL所支持与默认的存储引擎 mysql > show engines;
2、修改默认存储引擎
#在线修改全局配置 mysql > set global default_storage_engine=innodb #写入到配置文件中的配置 [mysqld] default_storage_engine=innodb
评论