面试官:请你讲一下InnoDB和MyISAM的区别?

我是方圆,希望这些知识对我们有帮助!

InnoDBMyISAM
支持事务不支持事务
支持外键不支持外键
支持行锁不支持行锁,支持表锁
操作效率高操作效率高(执行大量读的操作,是很不错的选择)
支持全文索引支持全文索引
表占用空间较小表占用空间较大
聚集索引非聚集索引

1. MyISAM不支持事务,书摘

  • 摘自《高性能MySQL》
    InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎。它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚。InnoDB的性能与自动崩溃恢复的特性,使得它在非事务存储需求中也很流行。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
    MyISAM:在MySQL 5.1 及之前的版本,MyISAM是默认引擎。MyISAM提供的大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM并不支持事务以及行级锁,而且一个毫无疑问的缺陷是崩溃后无法安全恢复。

2. MyISAM与InnoDB表锁和行锁的解释

在MySQL中,表级锁有两种模式:表共享读锁表独占写锁。也就是说对于MyISAM引擎的表多个用户可以对同一个表发起读的请求,但是如果一个用户对表进行写操作,那么则会阻塞其他用户对这个表的读和写。
InnoDB引擎的表是通过索引项来加锁实现的,即只有通过索引条件检索数据的时候,InnoDB才会使用行级锁,否则也会使用表级锁。

3. 在物理空间的存储

所有数据库的文件都在data目录下,一个文件夹对应一个数据库,本质是文件的存储
InnoDB在数据库中只存在一个*.frm文件,以及上级目录下的ibdata文件
MyISAM在磁盘上存储成三个文件

  1. *.frm(存储表定义)
  2. MYD(MyData,数据文件)
  3. MYI(MyIndex,索引文件)

4. 是否保存数据库表中表的具体行数

InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table 时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。

5. 一篇写的非常好的MySQL索引解析

MySQL索引-B+树(看完你就明白了)
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方圆想当图灵

嘿嘿,小赏就行,不赏俺也不争你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值