【数据库】详解MySQL数据库中四种主要存储引擎

打印 上一主题 下一主题

主题 1757|帖子 1757|积分 5271

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
1.存储引擎InnoDB
2.存储引擎MyISAM
3.存储引擎ARCHIVE
4.存储引擎MEMORY


存储引擎在MySQL的逻辑架构中位于第二层,负责MySQL中数据的存储与提取。MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的。每一种存储引擎都有它的优势和劣势
检察当前数据库所支持的所有存储引擎
  1. SHOW ENGINES;
复制代码

1.存储引擎InnoDB

InnoDB是MySQL5.5及以上版本默认的存储引擎,它是默认的事件型存储引擎,也是最重要、使用最广泛的存储引擎。在一般情况下,优先使用InnoDB存储引擎
使用InnoDB存储引擎时,会将数据表分为.frm和.idb两个文件进行存储

InnoDB接纳MVCC(多版本并发控制)来支持高并发,InnoDB实现了四个隔离级别,默认级别是REPETABLE READ,并通过间隙锁策略防止幻读出现,它的锁粒度是行锁
InnoDB是典型的事件型存储引擎,它通过一些机制和工具,支持真正的热备份
InnoDB表是基于聚簇索引创建的,聚簇索引对主键的查询有很高的性能,不外它的二级索引(非主键索引)必须包含主键列
MySQL5.6之前默认是体系表空间,体系表空间不能收缩体系文件,浪费空间。5.6版本后使用独立表空间,可以收缩文件,节省空间
  1. SHOW VARIABLES LIKE 'innodb_file_per_table%';
复制代码

体系表空间是数据存储目录data文件夹中的ibdata1文件

独立表空间是ibd文件

如果想收缩表空间的巨细,可以使用语句去实验
  1. OPTIMIZE TABLE 表名;
复制代码
2.存储引擎MyISAM

MyISAM是5.5版本之前MySQL数据库默认的存储引擎
可以使用如下的SQL语句创建数据库,接纳MyISAM存储引擎
  1. CREATE TABLE `myisam_demo` (
  2.  `id` varchar(255) NOT NULL,
  3.  `name` varchar(255) DEFAULT NULL,
  4.  PRIMARY KEY (`id`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
复制代码
MyISAM接纳的是索引与数据分离的情势,将数据保存在三个文件中
frm:存储表结构的文件,所有存储引擎都有
myd:存储数据的文件
myis:存储索引的文件

MyISAM是基于非聚集索引进行存储的
MyISAM不支持行锁,所以读写时对表加上共享锁,在写入时对表加上排他锁。由于是对整张表加锁,相比InnoDB,在并发写入时效率很低
MyISAM不支持事件,但提供了大量的特性,包括全文索引、压缩等
进行压缩后的表是不能进行修改的,但是压缩表可以极大减少磁盘占用空间,因此也可以减少磁盘IO,从而进步查询性能
全文索引是一种基于分词创建的索引,可以支持复杂的查询
MyISAM和InnoDB存储引擎的对比

3.存储引擎ARCHIVE

构成:
用zlib对表数据进行压缩,磁盘IO更少,数据存储在.arz文件中
特点:
只支持insert和select操作,只允许在自增id列上加索引
Achive表比MyISAM表小约75%,比支持事件处置惩罚的InnoDB表小约83%,当数据量非常大的时候Achive的插入性能体现比MyISAM好
较小的空间占用在移植MySQL数据时发挥作用,当须要把数据从一台MySQL服务器转移到另一台的时候,Achive表可以方便地移植到新的MySQL环境,只需将保存Achive表的底层文件复制过去即可

创建表的SQL语句如下
  1. CREATE TABLE `t_stu_archive` (
  2.  `id` int(11) NOT NULL AUTO_INCREMENT,
  3.  `username` varchar(10) DEFAULT NULL,
  4.  KEY `id` (`id`)
  5. ) ENGINE=ARCHIVE DEFAULT CHARSET=utf8;
复制代码
数据测试
  1. -- 新增
  2. insert into t_stu_archive values (null,"赵四");
  3. -- 查询
  4. select * from t_stu_archive;
复制代码
4.存储引擎MEMORY

也称HEAP存储引擎,所有的数据保存在内存中
特点:


  • 使用表级锁
  • 支持HASH索引和BTree索引
  • 所有的字段都是固定长度varchar(10) = char(10)
  • 不支持Blog和Text等大字段
  • 最大巨细由max_heap_table_size参数决定
建表语句:
  1. CREATE TABLE `t_stu_memory` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `username` varchar(20) DEFAULT NULL,
  4.   PRIMARY KEY (`id`)
  5. ) ENGINE=MEMORY DEFAULT CHARSET=utf8;
复制代码
使用场景:


  • hash索引用于查找大概映射表(邮编和地区的对应表)
  • 用于保存数据分析中产生的中心表
  • 用于缓存周期性聚合数据的效果表
  • memory数据易丢失,所以要求数据可再生

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表