深入理解Mysql系列——存储引擎详解

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。

Mysql常用的存储引擎有Innodb和Myisam。

InnoDB与MyISAM区别

Oracle收购sun(sun之前收购了mySQL),发布的首个版本5.5,默认使用了InnoDB作为存储引擎,而之前的版本使用MyISAM作为默认。

MyISAM 和 InnoDB的适用场景

MyISAM适合:读多写少(1)做很多count 的计算;(2)插入不频繁,查询非常频繁;(3)没有事务。

InnoDB适合:写多读少(1)可靠性要求比较高,或者要求事务;(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。

为什么MyISAM会比Innodb 的查询速度快

https://cloud.tencent.com/developer/article/1401129

INNODB在做SELECT的时候,要维护的东西比MYISAM引擎多很多;

1)数据块,INNODB要缓存,MYISAM只缓存索引块,这中间还有换进换出的减少;

2)innodb寻址要映射到块,再到行,MYISAM 记录的直接是文件的OFFSET,定位比INNODB要快,innodb因为是聚簇索引,它把一块数据读入内存后建立索引然后定位,而MYISAM是通过数据的物理位置引用被索引的行, MYISAM是根据索引之间去物理地址中查找行。

3)INNODB还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护MVCC ( Multi-Version Concurrency Control )多版本并发控制(读不加锁,读写不冲突。

两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁。

1、存储结构

每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义;数据文件的扩展名为.MYD (MYData);索引文件的扩展名是.MYI (MYIndex)。

InnoDB:.ibd的文件,存储与该表相关的数据、索引、表的内部数据字典(表缓存)信息;.frm表结构文件。

2、数据导出:MyISAM只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。

3MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb占用空间较大

4MyISAM存储空间几乎没有限制,最多可到64PB,InnoDB最多64TB

5InnoDB支持事务(每条sql都是事务,默认配置事务自动提交)和外键,MyISAM不支持

6对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。

7表锁差异

MyISAM:只支持表级锁,select,update,delete,insert语句都会给表自动加锁
InnoDB:支持行级锁,但是InnoDB的行锁,只是在WHERE的主键(唯一索引)是有效的,非主键的WHERE都会锁全表的。
对索引加锁,而不是对数据行加锁,只有当查询条件能使用索引的时候才会使用行级锁

两者锁读的时候共享锁、写的时候排它锁(可以一起读,不能一起写或读写)

8全文索引(通过关键字匹配来查询)

MyISAM:支持 FULLTEXT类型的全文索引
InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。(
从5.6开始支持,但不支持中文索引)

9表的具体行数

MyISAM:保存有表的总行数,如果select count(*) from table;会直接取出出该值。
InnoDB:没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。

10CURD操作

MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除

11、MyISAM B树,InnoDB B+树

MySQL其他存储引擎

Blackhole引擎,它会丢弃所有插入的数据,不做任何保存。但会记录日志。

CSV引擎,可以将CSV文件作为MySQL表来处理,可以作为一种数据交换机制。

Memory引擎,数据存在内存中,访问速度快,重启后数据会丢失。

Merge引擎,是MyISAM的变种,由多个MyISAM表合并而来的虚拟表。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值