Mysql存储引擎

2023-11-04

目录

Mysql有哪些存储引擎

Mysql存储引擎IMyISAM与InnoDB区别

MyISAM索引与InnoDB索引的区别?

InnoDB引擎的4大特性

如何选择存储引擎

一张表,里面有ID自增主键,当insert了17条记录以后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18仍是15 ?

innodb的事务与日志的实现方式


一、存储引擎

  • Mysql有哪些存储引擎

mysql使用show engines 查看当前Mysql支持哪些存储引擎

 通过上图可以看出Mysql支持9种存储引擎,但是常用的存储引擎一般是innoDB,MyISAM,MEMORY这三种存储引擎

  • Mysql存储引擎IMyISAM与InnoDB区别

MyISAM InnoDB
存储结构 每张表被存放在三个文件:frm-表格定义、MYD(MYData)-数据文件、MYI(MYIndex)-索引文件 所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB
存储空间 MyISAM可被压缩,存储空间较小 InnoDB的表需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引
可移植性、备份及恢复 由于MyISAM的数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作 免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了
文件格式 数据和索引是分别存储的,数据.MYD,索引.MYI 数据和索引是集中存储的,.ibd
记录存储顺序 按记录插入顺序保存 按主键大小有序插入
外键 不支持 支持
事务 不支持 支持
锁支持 表级锁定 行级锁定、表级锁定,锁定力度小并发能力高
SELECT MyISAM更优
INSERT、UPDATE、DELETE InnoDB更优
select count(*) myisam更快,因为myisam内部维护了一个计数器,可以直接调取。
索引的实现方式 B+树索引,myisam 是堆表 B+树索引,Innodb 是索引组织表
哈希索引 不支持 支持
全文索引 支持 不支持
  • MyISAM索引与InnoDB索引的区别?

  1. InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。
  2. InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效。
  3. MyISAM索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。
  4. InnoDB非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。
     
  • InnoDB引擎的4大特性

  1. 插入缓冲(insert buffer)

  2. 二次写(double write)

  3. 自适应哈希索引(ahi)

  4. 预读(read ahead)

  • 如何选择存储引擎

  1. 如果没有特别的需求,使用默认的Innodb即可。
  2. MyISAM:以读写插入为主的应用程序,比如博客系统、新闻门户网站。
  3. Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键。比如OA自动化办公系统。

  • 一张表,里面有ID自增主键,当insert了17条记录以后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18仍是15 ?

  1. 若是建立的表的类型是InnoDB,若是新增一条记录(不重启mysql的状况下),这条记录的id是18;可是若是重启(文中提到的)MySQL的话,这条记录的ID是15。由于InnoDB表只把自增主键的最大ID记录到内存中,因此重启数据库或者对表OPTIMIZE操做,都会使最大ID丢失。
  2. 若是表的类型是MylSAM,那么这条记录的ID就是18。由于MylSAM表会把自增主键的最大ID记录到数据文件里面,重启MYSQL后,自增主键的最大ID也不会丢失。
  • innodb的事务与日志的实现方式

    1.有多少种日志

  •  redo和undo

    2.日志的存放形式

  •  redo:在页修改的时候,先写到 redo log buffer 里面, 而后写到 redo log 的文件系统缓存里面(fwrite),而后再同步到磁盘文件(fsync)。 Undo:在 MySQL5.5 以前, undo 只能存放在 ibdata*文件里面, 5.6 以后,能够经过设置 innodb_undo_tablespaces 参数把 undo log 存放在 ibdata*以外。

    3.事务是如何经过日志来实现的,说得越深刻越好

  • 基本流程以下: 由于事务在修改页时,要先记 undo,在记 undo 以前要记 undo 的 redo, 而后修改数据页,再记数据页修改的 redo。 Redo(里面包括 undo 的修改) 必定要比数据页先持久化到磁盘。 当事务须要回滚时,由于有 undo,能够把数据页回滚到前镜像的 状态,崩溃恢复时,若是 redo log 中事务没有对应的 commit 记录,那么须要用 undo把该事务的修改回滚到事务开始以前。 若是有 commit 记录,就用 redo 前滚到该事务完成时并提交掉。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql存储引擎 的相关文章

随机推荐

  • 防火墙NAT配置实验

    目录 一 NAT的种类 分为基于源IP的转换 基于目的的IP转换 外部用户找内部服务器 二 实验拓扑 登陆防火墙 三 配置NAT 配置接口 实验一 配置no pat NAT 测试no pat 实验二 NAPT配置 NAPT测试 实验三 配置
  • web目录扫描工具dirscan

    成果 在扫描之前 我们首先要对url进行整理 因为我使用的是requests模块 所以我的url要用http 开头 所以我的判断代码是 if url startswith http url url elif url startswith h
  • 制作跟mnist一样格式的数据集(4)

    1将这篇文章https blog csdn net it job article details 80520975中自己制作的图片作为训练集 自己手写的 2将这篇文章https blog csdn net it job article de
  • ROS通信编程_服务编程_客户端编程

    系统环境 Ubuntu16 04 实现一个客户端 1 初始化ROS节点 2 创建一个Client实例 3 发布服务请求数据 4 等待Server处理之后的应答结果 在功能包 src下新建文件client cpp 输入以下内容并保存退出 例程
  • 用ScrollView解决Android屏幕显示不全的问题

    当控件比较多而在界面不能完全显示时 如下图所示 可以用ScrollView解决上述问题 使其可以通过垂直滚动将最下面的控件显示出来 ScrollView也是一个Layout布局 可以让它内部的数据显示不下的时候出现滚动条 但需要注意的是 S
  • json对象的使用依赖:

    1 jackso依赖
  • java mysql 自动重连_JDBC实现Mysql自动重连机制的方法详解

    前言 本文主要给大家介绍的是关于jdbc实现mysql自动重连机制的相关内容 分享出来供大家参考学习 下面来一起看看详细的介绍 日志 using the connector j connection property autoreconne
  • JAVA的内存回收机制(快速入门版)

    java内存回收机制 内存回收 是JVM中垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制 引用 java中什么是引用 Person xiaoi new Person new person 以pers
  • 什么是NoSQL数据库?它与传统数据库有什么异同以及NoSQL的三大基石和四大类型

    1 NoSQL数据库的特点 灵活的可拓展性 NoSQL数据库在设计之初就是为了满足 横向扩展 的需求 灵活的数据模型 NoSQL数据库采用键 值 列族等非关系模型 允许在一个数据元素里存储不同类型的数据 与云计算紧密融合 NoSQL数据库凭
  • Java中的同步与锁机制详解

    作为Java程序员 我们都知道在编写多线程程序时 需要确保线程之间的同步与互斥 本文将详细介绍Java中的同步与锁机制 1 为什么需要同步与锁 在多线程环境中 如果多个线程同时访问共享资源 可能会导致数据不一致或其他不可预料的结果 为了解决
  • PTA -1012 数字分类

    1012 数字分类 20 分 给定一系列正整数 请按要求对数字进行分类 并输出以下 5 个数字 A 1 能被 5 整除的数字中所有偶数的和 A 2 将被 5 除后余 1 的数字按给出顺序进行交错求和 即计算 n 1 n 2 n 3 n 4
  • zigzag走线原理及应用

    电路板上弯弯扭扭的走线有什么用 往期文章 一文读懂高速互联的阻抗及反射 上 一文读懂高速互联的阻抗及反射 中 前面几篇文章有部分读者反馈太深奥 不好懂 要求来一点轻松易懂的 这不 它来了 本期文章我们来分享近期工作中的一个小故事 一段奇怪的
  • 数据结构学习——循环链表的使用

    一 循环链表的介绍 循环链表是一种特殊类型的链表 其中链表中的最后一个节点指向链表中的第一个节点 形成循环的结构 与普通链表相比 循环链表可以在链表中的任何位置进行遍历 并且可以方便地实现循环操作 在循环链表中 每个节点通常包含一个数据元素
  • vue3定义全局方法

    下面用element puls中的ElMessage组件为例 首先我在我的utils js工具类函数方法中定义了一个方法 代码如下 import ElMessage from element plus import element plus
  • 记网易面试总结

    最近进行了一次网易的社招面试 目前结果未知 但是从网易面试中我还是有一些体会 总结如下 作为非计算机专业的程序员来说 如果要进大厂 数据结构与算法是一定要补的 适度刷下leetcode中的算法题 大厂都好这一口 不要不信邪 我就以身试法了一
  • PHP用正则验证用户名

    在php中 用正则表达式写一个用户名的验证 要求 第一个字符为英文 只能用字母 数字 汉字 下划线 总长度限制在4 9位的昵称
  • vs2017 社区版本离线下载安装包

    百度得来 记录备忘 下载vS 2017 https visualstudio microsoft com zh hans thank you downloading visual studio sku Community rel 15 下载
  • Directx11教程三十八之Pick(拾取技术)

    这节教程是关于Pick 拾取技术的 程序的结构如下 在看这节教程前先弄懂 1 大概了解D3D11的渲染流水线 2 D3D11教程三十七之FrustumCulling 视截体裁剪 上半节教程 弄不懂也没关系 两节教程之间有一些联系 但是由于我
  • 完全二叉树——二叉堆(BinaryHeap)

    前言 优先队列是允许至少下列两种操作的数据结构 insert 插入 以及deleteMin 删除最小者 其中deleteMin的工作是找出 返回 并删除优先队列中最小的元素 insert操作等价于enqueue 入队 而deleteMin则
  • Mysql存储引擎

    目录 Mysql有哪些存储引擎 Mysql存储引擎IMyISAM与InnoDB区别 MyISAM索引与InnoDB索引的区别 InnoDB引擎的4大特性 如何选择存储引擎 一张表 里面有ID自增主键 当insert了17条记录以后 删除了第