mysql面试(五)存储引擎类问题

database

MySQL常用存储引擎

引擎名称

事务

说明

MYISAM

N

MySQL5.6之前的默认引擎,最常用的非事务型存储引擎

CSV

N

以CSV格式存储的非事务型存储引擎

Archive

N

只运行查询和新增数据不允许修改的非事务型存储引擎

Memory

N

是一种易失性非事务型存储引擎

InnoDB

Y

最常用事务性存储引擎

NDB

Y

MySQL集群使用的内存型事务存储引擎

MYISAM

特点

  • 非事务存储引擎
  • 以堆表方式存储
  • 使用表级锁
  • 支持BTree索引,空间索引,全文索引

使用场景

  • 读操作远远大于写操作
  • 不需要使用事务

CSV

特点

  • 非事务型存储引擎
  • 数据以CSV格式存储
  • 所有列都不能为NULL
  • 不支持索引

使用场景

  • 作为数据交换的中间表使用

Archive

特点

  • 非事务型存储引擎
  • 表数据使用zlib压缩
  • 只支持Insert和Select
  • 只允许在自增ID上建立索引

使用场景

  • 日志和数据采集类应用
  • 数据归档存储

Memory

特点

  • 非事务型存储引擎
  • 数据保存在内存中
  • 所有字段长度固定
  • 支持Btree和Hash索引

使用场景

  • 用于缓存字典映射表
  • 缓存周期性分析数据

InnoDB

特点

  • 事务型存储引擎
  • 数据按主键聚集存储
  • 支持行级锁和MVCC
  • 支持Btree和自适应Hash索引
  • 支持全文和空间索引

使用场景

  • 大多数OLTP场景

NDB

特点

  • 事务型存储引擎
  • 数据保存在内存中
  • 支持行级锁
  • 支持高可用集群
  • 支持Ttree索引

使用场景

  • 需要数据完全同步的高可用场景

什么情况下InnoDB无法在线修改表

操作

语法

加全文索引

CREATE FULTEXT INDEX name ON table(column)

加空间索引

ALTER TABLE geom ADD SPATIAL INDEX(g)

删除主键

ALTER TABLE tb_name DROP PRIMARY KEY

增加自增列

alert table t add column id int auto_increment not null primary key

修改列类型

alter table t change c1 c1 NEW_TYPE

修改字符集

alter table t character set = charset_name

在线DDL存在的问题

  • 有部分语句不支持在线DDL
  • 长时间DDL操作会引起严重主从延迟
  • 无法对DDL操作进行资源限制

如何更安全执行DDL

  • pt-online-shema-change [OPTIONS]DSN

InnoDB如何实现事务

原理

特征

说明

原子性(A)

一个事务的所有操作,或全部成功或全部失败

一致性(C)

事务开始之前和事务结束只会,数据库保持完整性

隔离性(I)

每个读写事务的对象和其他事务的操作对象相互分离,该事务提交前对其他事务都不可见

持久性(D)

事务一旦提交,结果就是永久性,如果宕机也能恢复

实现方式

特征

说明

原子性(A)

回滚日志(Undo log): 用于记录数据修改前的状态

一致性(C)

重作日志(Redo log): 用于记录数据修改后的状态

隔离性(I)

锁:用于资源隔离,分为共享锁和排他锁

持久性(D)

重作日志(Redo log)+回滚日志(Undo log)

INNODB锁

  • 查询需要对资源加共享锁(S)
  • 修改需要对资源加排他锁(X)

排他锁

共享锁

排他锁

不兼容

不兼容

共享锁

不兼容

兼容

欢迎扫描下方二维码,持续关注:

互联网工程师(id:phpstcn),我们一起学习,一起进步

以上是 mysql面试(五)存储引擎类问题 的全部内容, 来源链接: utcz.com/z/531269.html

回到顶部