网易MySQL微专业学习笔记(十)-MySQL存储引擎

前言

这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL数据库对象与应用”中的MySQL数据类型相关笔记。

所有笔记可能不定期更新,发布时不一定为最终版。

正文

Mysql存储引擎

有多种可选方案,可插拔,可修改存储引擎

基于表选择使用何种存储引擎

create table test(a int) engine = innodb;

show engines;

InnoDB存储引擎

索引组织表

支持事务

支持行级锁

数据块缓存

日志持久化

稳定可靠,性能好,线上尽量使用InnoDB

MyISAM存储引擎

堆表

不支持事务

只维护索引缓存池,表数据缓存交给操作系统

锁力度较大--导致并发性能非常差

数据文件可以直接拷贝,偶尔可能会用上

不建议线上业务数据使用

MEMORY存储引擎

数据全内存存放,无法持久化

性能较高

不支持事务

适合偶尔作为临时表使用

临时表仅在当前链接中有效,其他链接无法访问。

create temporary table tmp(id int) engine = memory;

BLACKHOL存储引擎

数据不作任何存储,如果直接保存在里面,会被直接丢掉。

利用Mysql Replicate,充当日志服务器

在Mysql Replicate环境中充当代理主

TokuDB

分形树存储结构

支持事务

行锁

压缩效率较高

适合大批量insert的场景

http://www.tokutek.com/tokudb-for-mysql/download-community/

Mysql Cluster

多主分布式集群

数据节点间冗余,高可用

支持事务

设计上易于扩展

面向未来,线上慎用

改变表的存储引擎

alert table m ENGINE = innodb;

InnoDB存储引擎

架构

     内存空间

     后台各种线程()

     磁盘上的文件

物理文件

     数据文件、日志文件

InnoDB系统表空间

ibdata1存放什么:

     回滚段

     所有InnoDB表元数据信息

     Double Write,Insert buffer dump等

自动扩展机制

日志文件

表定义文件

表名.

表数据文件

InnoDB数据文件存储结构

索引组织表(聚簇表)

根据表逻辑主键排序

数据节点每页16k--二分查找

根据主键寻址速度很快

主键值递增的insert插入效率较好

主键随机insert插入操作效率较差

因此,InnoDB表必须指定主键,建议使用自增数字

InnoDB数据块缓存池

数据的读写需要经过缓存

数据以整页(16k)为单位读取到缓存中

缓存中的数据以LRU策略换出

IO效率高,性能好

InnoDB数据持久化与事务

事务日志实时持久化

内存变化数据(脏数据)增量异步刷出到磁盘

实例故障考重放日志恢复

性能好,可靠,恢复快

InnoDB行级锁

写不阻塞读

不同行间的写相互不阻塞

并发性能好

InnoDB与事务ACID

事务ACID特效完整支持

回滚段失败回滚(A)

支持主外键约束(C)

事务版本+回滚段=MVCC(I)

事务日志持久化(D)

默认可重复读隔离级别,可以调整

事务锁粒度

行锁

InnoDB,Oracle

页锁

SQL Server

表锁

MyISAM,Memory

锁升级

InnoDB的gap lock

什么是幻读

A连接开启一个事务,并查处一个值,幻读情况下,在B连接中插入一个值,A连接再次查询时读取到的情况。

gap locak 消灭幻读

     InnoDB消灭幻读仅仅为了确保statement模式replicate的主从一致性

自增主键做条件更新,性能最好

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Netkiller

数据库进程间通信解决方案

数据库进程间通信解决方案 数据库与其他第三方应用程序进程间通信解决方案 摘要 你是否想过当数据库中的数据发生变化的时候出发某种操作?但因数据无法与其他进程通信(...

3445
来自专栏沃趣科技

MySQL中的统计信息相关参数介绍

统计信息的作用 上周同事在客户现场遇到了由于统计信息的原因,导致应用数据迁移时间过慢,整个迁移差点失败。关键时刻同事发现测试环境与生产环境SQL语句执行计划不一...

34710
来自专栏应用案例

索引,视图,存储过程和触发器文档

实验案例一:验证索引的作用 1、首先创建一个数据量大的表,名称为“学生表”,分别有三列,学号,姓名和班级,如下图所示,学号为自动编号,班级为默认值“一班”。 ?...

2268
来自专栏Java架构师历程

MySQL的三大引擎

InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本 的差别为:

1.2K2
来自专栏沃趣科技

ASM 翻译系列第二十六弹:ASM 高级知识 Where is my data

原作者:Bane Radulovic 译者: 邱大龙 审核: 魏兴华 DBGeeK社群联合出品 Where is my data 有时候我们想要知道...

3657
来自专栏恒恒的专栏

swoole+php搭建高性能脚本服务

后台服务的业务逻辑中,或多或少需要一些异步去处理的脚本逻辑,例如业务的统计、上报、数据运算,定时监控等等。实现的方法也有很多,用linux自带的c...

2321
来自专栏Netkiller

数据库进程间通信解决方案

数据库进程间通信解决方案 数据库与其他第三方应用程序进程间通信解决方案 摘要 你是否想过当数据库中的数据发生变化的时候出发某种操作?但因数据无法与其他进程通信(...

3856
来自专栏Python中文社区

用Python测试InnoDB和MyISAM的读写性能

首先我们需要把两张使用了不同引擎的表创建出来,使用为了方便起见,我们直接使用Navicat创建了两张 员工信息表,具体字段如下:

1743
来自专栏FreeBuf

安全科普:SQLi Labs 指南 Part 1

译者:SQL Libs一直也没看到有人写过比较完整的指南,只有作者在自己的博客上帖了一些tip和一些视频,偶然看到一篇文章在写这个,便拿过来翻一下,以作参考,原...

1909
来自专栏Netkiller

数据库进程间通信解决方案IPC

数据库进程间通信解决方案 数据库与其他第三方应用程序进程间通信解决方案 摘要 你是否想过当数据库中的数据发生变化的时候出发某种操作?但因数据无法与其他进程通信...

3133

扫码关注云+社区

领取腾讯云代金券