mysql存储引擎

存储引擎是基于表的,而不是数据库。

1.myisam

1)特点

  • 支持全文索引
  • 拥有较高的插入,查询速度
  • mysql版本5.5.8之前默认存储引擎
  • 允许没有任何索引和主键的表存在
  • 使用的B-tree作为索引结构,叶节点的data域存放的是数据记录的地址
  • 基于isam(index sequential access method 有索引的顺序访问方法)存储引擎
  • 不支持事务
  • 不支持外键约束
  • 表锁,不支持行锁
  • 只缓存索引,不会数据
  • 读写相互阻塞,不仅会在写入的时候阻塞读取,myisam慧慧在读取的时候阻塞写入,但读本身并不会阻塞另外的读

2)存储结构
数据文件(.MYD):存放表数据
索引文件(.MYI):存放表索引
结构文件(.frm):存放表结构的定义信息
(可以直接拷贝数据文件和索引文件到不同的服务器上使用)

3)存储引擎分类
a.静态myisam:静态表,字段都是非变长的。存储非常迅速,容易缓存,出现故障容易恢复,占用空间通常比动态表多
b.动态mysiam:动态表,更新删除数据会产生碎片
c.压缩myisam:压缩表,使用myisampack工具创建

2.InnoDB
1)特点

  • 缓存索引和数据
  • 支持行锁定和外键
  • 支持外键完整性约束
  • 支持事务安全表(ACID)
  • 5.6.4版本之后支持全文索引
  • 5.5.8之后mysql默认存储为innodb
  • 辅助索引data域存储相应记录主键的值而不是地址

2)ACID

  • 原子性(Atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。
  • 一致性(Consistency):数据库总是从一个一致性的状态转换到另外一个一致性的状态。
  • 隔离性(Isolation):通常一个事务所做的修改在最终提交前,对其他事务是不可见的。事务的隔离性是用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
  • 持久性(Durability):一旦事务提交,则其他所有的修改就会永久保存到数据库中。

3)存储结构:
.frm:表结构定义
.ibd:表数据和表索引
(存储方式上有共享表空间存储和多表空间存储两种方式)

3.memory

  • 不支持blob或text列
  • 数据表只存在于内存中,常应用于临时表
  • 默认使用hash索引,所以数据的存取速度非常块
  • 将表中的数据存储到内存中,未查询和引用其他数据提供快速访问

4.archive

  • 只支持select和insert语句
  • 常用于日志记录和聚合分析方面
  • 5.5版本之前不支持索引,之后支持索引

5.CSV

  • 不支持索引
  • 不允许表中的字段为null
  • 创建的表会在数据目录下生成csv文件

6.balckhole

  • 支持事务和MVCC行锁
  • 写入这种引擎表的任何数据都会消失
  • 主要用于日志记录或同步归档的中继存储

7.performance_schema

  • 用于收集数据库服务器性能参数

8.mrg_myisam

  • merge存储引擎是一组myisam表的组合,表结构必须完全相同

9.TokuDB和面向列

  • TokuDB引擎使用了一种新的叫做分形树的索引数据结构,是一种大数据存储引擎。因为其拥有很高的压缩比,可以在很大的数据量上创建大量索引。

  • infobright是最有名的面向列的存储引擎,是为数据分析和数据仓库应用设计的。但是,面向列的存储引擎不支持索引。

  • infobright需要对mysql服务器做指定,因为一些地方需要修改以后适应面向列存储的需要。

10.其他对比

1)count()函数
myisam保存表的总行数,统计表行数查询时直接读取
innodb没有保存表的总行数,统计整个表时会遍历整个表,消耗比较大

2)功能对比

功能myisaminnodbmemoryarchive
存储限制256TB64TBRAM无限制
事务×××
全文索引√(5.6版本后)××
哈希索引×××
数据缓存×××
外键×××

11.存储引擎查看

## 查看支持的存储引擎信息
show engines;

## 修改表的存储引擎
## 建议不要混合使用多种存储引擎,否则可能带来一系列复杂的问题,以及一些潜在的bug和边界问题
alter table tb_name engine = engine_name;

## 通过查询表结构的方式查看的存储引擎
show create table tb_name;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值