码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • MySQL面试之---MyISAM与InnoDB的区别


    区别:

    1. 事务: InnoDB支持事务(四种隔离级别), 事务安全, MyISAM不支持事务, 每次查询都是原子的.
    2. 锁: InnoDB行级锁, MyISAM只能针对于表加锁
    3. 外键: InnoDB支持外键, MyISAM不支持. 但是规范上最好不使用外键.
    4. 索引: InnoDB MySQL5.6支持全文索引, 5.6 之前MyISAM支持全文索引
    5. 索引的存储方式: InnoDB聚簇索引, MyISAM非聚簇索引.
    6. 总行数: MyISAM存储总行数, innodb不存储总行数.
    事务外键锁粒度索引存储方式表空间关注点
    InnoDB√√表锁和行锁聚簇和非聚簇大事务,高并发
    MyISAM××只有表锁只非聚簇小性能

    使用场景:

    MyISAM效率快于InnoDB但是只适用于小型应用(因为表空间小), 跨平台支持(把表保存成文件), 还有就是大量的select.

    ==面试延伸: ==
    如果问到了: 聚簇索引 可以(可能)引申到-> B树, B+树
    点击此处链接

    如果有很大帮助, 拜托点个赞, 说实话点个赞的话真的我能开心一天.




    以下是补充和说明:

    InnoDB事务的四种隔离级别

    READ UNCOMMITTED读未提交
    READ COMMITTED读已提交 (最常用的隔离级别)
    REPEATABLE READ可重复读 (InnoDB默认)
    SERIALIZABLE串行化

    引申问题:

    1. 分别解决什么问题? 怎么解决的?
      读未提交会产生脏读, 不可重复读, 幻读问题.
      实现: 读不加锁, 所有的写加行级锁.
      读已提交避免了脏读现象, 存在不可重复读和幻读问题.
      实现: 使用MVCC技术, 在每一行加入隐藏的字段(DB_TRX_ID: 修改该行的最后一个事务的id, DB_ROLL_PTR: 指向当前行的undo log日志, DB_ROW_ID: 行标识, DBLETE_BIT: 删除标志)
      也是读不加锁, 写加行级锁.
      每次写入数据, 数据行中隐藏列DATA_POLL_PTR存储指向UNDO记录的指针.
      每次读数据, 如果该行被其他事务锁定,顺着隐藏列DATA_POLL_PTR指针, 找到上一个有效的记录
      可重复读防止了脏读和不可重复读, 存在幻读.
      也是MVCC实现, 写加行级锁, 读不加锁. 和读已提交的区别就是行记录对于当前事务的可见性. 读已提交对数据的可见性是该数据的最新记录, 而可重复读对数据的可见性是事务开始时, 该数据的记录.
      串行, 防止脏读, 幻读, 不可重复读. 但是并发效率最低.
      实现: 读写全部加锁.
    2. 怎么看隔离级别 show variables like ‘transaction%’
    3. 怎么设置隔离级别 set [session/global] transaction level xxx

    什么是聚簇索引和非聚簇索引?

    MyISAM和InnoDB除了表结构文件都是.frm文件之外,
    MyISAM有两个文件存储信息, .myd(d代表Data存放数据)和 .myi(i代表Index存放索引), 索引文件的数据域存储指向数据文件的指针.
    InnoDB只有一个**.ibd**文件(d代表data)存放索引和数据文件, 索引和数据在一个文件中就被称为聚簇索引.

  • 相关阅读:
    LeetCode二叉树系列——144.二叉树的前序遍历
    Flowable 7.0 版本新特性:更高效、更灵活的业务流程管理
    最新微服务、MySQL、Nginx加Redis实战,助你成功向阿里P8进军
    系统编程 day11 信号量 (我也不知道是什么东西,不好解释 )(和之前的信号有一些不同 (函数), 但是也有一些操作相同 ,比如说 p v 操作 , )
    有手就会做!保姆级Jmeter分布式压测操作流程(图文并茂)
    线程的“结束”
    云服务--漏洞修复
    AHR亚马逊账户健康评级多久更新,如何查看解决
    如何在一台机器上(windows)安装两个MYSQL数据库
    MyBatis学习:使用Like进行模糊查询,MyBatis怎么传参或者组装模糊条件
  • 原文地址:https://blog.csdn.net/LionHearthz/article/details/126257616
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号