$ ls ~yifei/notes/

MySQL 内部原理面试常考题

Posted on:

Last modified:

  • InnoDB 有行级别的锁,而 MyISAM 只能锁定到表级别。
  • InnoDB 有更好的故障恢复机制。
  • InnoDB 实现了事务、外键和关系限制,MyISAM 没有。

总的来说,引用完整性和事物才是数据库的本质,所以说:“MyISAM is a file system that understands SQL. There’s no comparison. If you want a database engine with MySQL, use InnoDB.”

聚簇索引

MyISAM 没有使用聚簇索引,InnoDB 使用了聚簇索引。

四种隔离界别

  1. 读未提交 Read Uncommitted(在本次事务中可以读到其他事务中没有提交的数据 - 脏数据)

  2. 读已提交 Read Committed (只能读到其他事务提交过的数据。如果在当前事务中,其他事务有提交,则两次读取结果不同)

  3. 可重复读 Repeatable Read(MySQL 默认,保证了事务中每次读取结果都相同,而不管其他事物是否已经提交。会出现幻读)

  4. 序列化 Serializable(隔离级别中最严格的,开启一个 serializable 事务,那么其他事务对数据表的写操作都会被挂起)

  5. 读未提交:别人修改数据的事务尚未提交,在我的事务中也能读到。

  6. 读已提交:别人修改数据的事务已经提交,在我的事务中才能读到。

  7. 可重复读:别人修改数据的事务已经提交,在我的事务中也读不到。

  8. 串行:我的事务尚未提交,别人就别想改数据。

聚簇索引

InnoDB 使用聚簇索引,聚簇索引按照主键的顺序在磁盘上。MyISAM 不使用聚簇索引,行按照插入顺序在磁盘上。

聚簇索引的优势在于按照主键范围读取,而劣势在于主键中插入可能造成性能问题。

参考文献

  1. https://learnku.com/articles/13849/understanding-four-isolation-levels-in-mysql#2000d4
  2. https://dba.stackexchange.com/questions/1/what-are-the-main-differences-between-innodb-and-myisam
  3. https://jeremystein.com/journal/innodb-versus-myisam-no-comparison/
  4. https://mp.weixin.qq.com/s?__biz=MzI3MDA4MTY4OA==&mid=2647717558&idx=1&sn=96c2d2facbef870a37d4fa5709016c20
  5. https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651962887&idx=1&sn=4806f481448b1c3ddfbbd53e732a7bb5
  6. http://blog.codinglabs.org/articles/theory-of-mysql-index.html
  7. https://mydbops.wordpress.com/2018/06/22/back-to-basics-isolation-levels-in-mysql/
  8. https://mp.weixin.qq.com/s?__biz=Mzg2NjE5NDQyOA==&mid=2247483790&idx=1&sn=bf573b66517bed97ac63c3869ee6cb8a
WeChat Qr Code

© 2016-2022 Yifei Kong. Powered by ynotes

All contents are under the CC-BY-NC-SA license, if not otherwise specified.

Opinions expressed here are solely my own and do not express the views or opinions of my employer.

友情链接: MySQL 教程站