面试官:请你讲一下InnoDB和MyISAM的区别?(用于复习)

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

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

1. 解释全网说的最多的MyISAM不支持索引问题

  • 摘自《高性能MySQL》
    InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎。它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚。InnoDB的性能与自动崩溃恢复的特性,使得它在非事务存储需求中也很流行。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
    MyISAM:在MySQL 5.1 及之前的版本,MyISAM是默认引擎。MyISAM提供的大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM并不支持事务以及行级锁,而且一个毫无疑问的缺陷是崩溃后无法安全恢复。正是由于MyISAM引擎的缘故,即使MySQL支持事务已经很长时间了,在很多人的概念中MySQL还是非事务型数据库。尽管这样,它并不是一无是处的。对于只读的数据,或者表比较小,可以忍受修复操作,则依然可以使用MyISAM(但请不要默认使用MyISAM,而是应该默认使用InnoDB)

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+树(看完你就明白了)
在这里插入图片描述

原创文章 56 获赞 19 访问量 6023

猜你喜欢

转载自blog.csdn.net/qq_46225886/article/details/105953773