数据库常用的两种引擎

InnoDB、MyISAM

两种引擎差异对比

如何选择引擎

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就是)

结构图如下:

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

结构图如下:

两种引擎查找流程

  1. MyISAM
  2. InnoDB

B树和B+树的区别

B树的结构

索引两种类型

单值索引、联合索引

脏读、幻读、不可重复读

  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默认)

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

串行

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

Mysql引擎、隔离机制、存储结构、索引的更多相关文章

  1. 理解MySql事务隔离机制、锁以及各种锁协议

    一直以来对数据库的事务隔离机制的理解总是停留在表面,其内容也是看一遍忘一边.这两天决定从原理上理解它,整理成自己的知识.查阅资料的过程中发现好多零碎的概念假设串起来足够写一本书,所以在这里给自己梳理一 ...

  2. mysql的innodb数据存储结构

    ​ 数据库磁盘读取与系统磁盘读取 1,系统从磁盘中读取数据到内存时是以磁盘块(block)为基本单位,位于同一个磁盘块中的数据会被一次性读取出来. 2,innodb存储引擎中有页(Page)的概念,页 ...

  3. mysql innodb 的 逻辑存储结构

    如上图: innodb 的 逻辑存储单元分成 表空间,段,区,页 4个等级 默认情况下,一个数据库 所有变共享一个 默认的表空间(tablespan).可以指定每个表一个表空间. 一个表空间管理着 多 ...

  4. Mysql RR隔离更新列没有索引 会锁全表

    <pre name="code" class="html">mysql> show variables like '%tx_isolation ...

  5. MySQL两种表存储结构MyISAM和InnoDB的性能比较测试

    转载 http://www.jb51.net/article/5620.htm MySQL支持的两种主要表存储格式MyISAM,InnoDB,上个月做个项目时,先使用了InnoDB,结果速度特别慢,1 ...

  6. MySQL提升笔记(4)InnoDB存储结构

    这一节本来计划开始索引的学习,但是在InnoDB存储引擎的索引里,存在一些数据存储结构的概念,这一节先了解一下InnodDB的逻辑存储结构,为索引的学习打好基础. 从InnoDB存储引擎的存储结构看, ...

  7. MySQL InnoDB 逻辑存储结构

    MySQL InnoDB 逻辑存储结构 从InnoDB存储引擎的逻辑结构看,所有数据都被逻辑地存放在一个空间内,称为表空间,而表空间由段(sengment).区(extent).页(page)组成.p ...

  8. MYSQL Innodb逻辑存储结构

    转载于网络 这几天在读<MySQL技术内幕 InnoDB存储引擎>,对 Innodb逻辑存储结构有了些了解,顺便也记录一下: 从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放 ...

  9. 重新学习MySQL数据库3:Mysql存储引擎与数据存储原理

    重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有 ...

  10. InnoDB的表类型,逻辑存储结构,物理存储结构

    表类型 对比Oracle支持的各种表类型,InnoDB存储引擎表更像是Oracle中的索引组织表(index organized table).在InnoDB存储引擎表中,每张表都有个主键,如果在创建 ...

随机推荐

  1. AT2644 [ARC076C] Connected?

    可以发现这个问题是存在边界的,那么我们可以先放宽一下条件思考一下没有边界的情况. 通过手玩可以发现,若不存在边界总是可以完成这个任务的. 因为两条曲线之间不存在交点,那么每次我们可以从空隙穿过一条直线 ...

  2. 什么是UILabel

    UILabel极其常用,功能比较专一:显示文字 UILabel的常见属性 @property(nonatomic,copy) NSString *text; 显示的文字 @property(nonat ...

  3. centOs7.2安装cmake

    最新的3.15的安装不上 wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz tar xvf cmake-3.5.2.tar.gz cd cmak ...

  4. 【转载】Nginx简介及使用Nginx实现负载均衡的原理

    原文地址:http://blog.csdn.net/u014749862/article/details/50522276 是什么? Nginx 这个轻量级.高性能的 web server 主要可以干 ...

  5. Java基础复习(六)

    1. 接口的实现类中的实现接口中的抽象方法的方法必须为public,为什么? 接口中所有的方法与变量都默认是 public 的,在接口中可以不写出来.但在实现类中,如果不明写的话,就变成了 frien ...

  6. maven转web项目时 在Project Facets下转换时 Further configuration available没有出现

    如果下边的 further configuration available不出来 把Dynamic web module 去掉勾选,应用与项目,然后再点开项目的properties,再选中Dynami ...

  7. 大前端JS篇之搞懂【Set】

    我认为前端生态很大,犹如一片汪洋大海,很难短时间内窥其全貌,在这里我们不谈其他,只聊聊 Set Set是 es6 新提出的一个对象,也是一种数据结构,为什么es6要提出这样一个新对象呢,无非就是丰富j ...

  8. Spark算子 - aggregate

    释义 将每个partition内元素进行聚合,然后将每个partition的聚合结果进行combine,得到最终聚合结果.最终结果允许跟原始RDD类型不同 方法签名如下: def aggregate[ ...

  9. MySQL高性能学习笔记

    索引 何为索引?有什么作用? 索引是一种用于快速查询和检索数据的数据结构.常见的索引结构有: B 树, B+树和 Hash. 索引的作用就相当于目录的作用.打个比方: 我们在查字典的时候,如果没有目录 ...

  10. Solution -「多校联训」染色

    \(\mathcal{Description}\)   Link.   给定 \(n\) 和 \(q\) 次询问,每次询问给出 \(x,k\),求第 \(x\) 位为 0 且任意两个 1 的下标之差不 ...