Mysql引擎、隔离机制、存储结构、索引

数据库常用的两种引擎

InnoDB、MyISAM

两种引擎差异对比

img

如何选择引擎

select多,用MyISAM;

其他操作多,用InnoDB

两个引擎索引结构

查找mysql数据存储位置方式

  1. 找到mysql安装目录
  2. 打开my.ini
  3. 搜索datadir,就看到了

MyISAM

每张表都有三个文件

.frm 表结构文件,存放的是表结构信息

.MYD 数据文件,存放的是表数据及每行数据对应在磁盘中的地址

.MYI 索引文件 里面存放了设置的索引及与MYD文件相对应的磁盘地址

InnoDB

每张表都有.frm文件

而索引及索引数据有两种存储方式:

1. 非独立表空间

进入mysql安装目录,通过my.ini查找存储位置可发现idbdata1,

2. 独立表空间

每个表都对应有一个.idb文件

3. idb文件存的哪些内容

表的索引及索引对应行的数据都存放到这里了

4. 如何判断是否是独立表空间

判定条件除了上面看文件外,还可以通过执行sql查询

SHOW VARIABLES LIKE 'innodb_file_per_table';

value=off就代表是非独立表空间

聚簇索引&非聚簇索引

非聚簇索引:索引和索引数据存储在两个文件中(MyISAM就是)

结构图如下: img

聚簇索引:索引和索引数据存储在一个文件中(InnoDB就是)

结构图如下: img

两种引擎查找流程

  1. MyISAM
  2. InnoDB

B树和B+树的区别

B树的结构

img

索引两种类型

单值索引、联合索引

脏读、幻读、不可重复读

  1. 脏读

两个线程执行流程:

a线程将id=1的 字段1设置为10

b线程读取id=1的 字段1 数据 10

a线程对第一步操作进行回滚

b线程这时持有的 20 就是脏读

  1. 幻读

两个线程执行流程:

a线程读取用户id=1备注数量为一条

b线程将用户id=1备注添加了一条

a线程再次读取用户id=1备注数量,这时变成两条了

幻读又叫做幻行

  1. 不可重复度

两个线程执行流程:

a线程读取id=1的字段1数据为10

b线程将id=1的字段1数据修改为20

a线程再次读取id=1 字段1 ,发现两次读取的不一致,这就是不可重复读

四大隔离机制

读取未提交

可读取到未提交的数据,会导致脏读、幻读、不可重复读

读取已提交(Oracle 默认)

只读已提交的数据,会导致幻读、不可重复读

可重复读(mysql默认)

只读已提交的数据,但可读取多次,造成幻读

串行

并发差,不会造成脏读、幻读、不可重复读

原文地址:https://www.cnblogs.com/rb2010/p/13396286.html