Skip to content

本模块是公共类课程,适合后端开发嵌入式开发移动端原生开发(SQLite、Realm)等需要使用数据库进行数据持久化的岗位。

讲讲 MyISAM 和 InnoDB 的区别

MyISAM 和 InnoDB 是 MySQL 中的两种存储引擎,主要区别如下:

  1. 存储结构:MyISAM 存储引擎是表级锁,InnoDB 存储引擎是行级锁。
  2. 事务支持:MyISAM 存储引擎不支持事务,InnoDB 存储引擎支持事务。
  3. 外键支持:MyISAM 存储引擎不支持外键,InnoDB 存储引擎支持外键。
  4. 全文索引:MyISAM 存储引擎支持全文索引,InnoDB 存储引擎不支持全文索引。
  5. 表空间:MyISAM 存储引擎不支持表空间,InnoDB 存储引擎支持表空间。
  6. 性能:MyISAM 存储引擎读取速度快,写入速度慢,适合读多写少的场景;InnoDB 存储引擎读取速度慢,写入速度快,适合读写频繁的场景。

MyISAM 和 InnoDB 的主要区别是存储结构、事务支持、外键支持、全文索引、表空间和性能,根据不同的需求选择合适的存储引擎。

讲讲 MySQL 和 MongoDB 的区别是什么?指出最大的区别

MySQL 和 MongoDB 是两种不同类型的数据库,主要区别如下:

  1. 数据库类型:MySQL 是关系型数据库,MongoDB 是非关系型数据库。
  2. 数据结构:MySQL 是表结构,MongoDB 是文档结构。
  3. 数据模型:MySQL 是静态模式,MongoDB 是动态模式。
  4. 查询语言:MySQL 是 SQL 语言,MongoDB 是 JSON 语言。
  5. 事务支持:MySQL 支持事务,隔离级别为可重复读,MongoDB 在 4.0 版本后支持事务,隔离级别为读提交。
  6. 复杂查询:MySQL 支持复杂查询,MongoDB 不支持复杂查询。
  7. 数据库引擎:MySQL 支持多种存储引擎,MongoDB 只支持一种存储引擎。
  8. 数据库性能:MySQL 读取速度快,写入速度慢,MongoDB 读取速度慢,写入速度快。

MySQL 和 MongoDB 的最大区别是数据库类型,MySQL 是关系型数据库,MongoDB 是非关系型数据库。

为什么 InnoDB 选择使用 B+ 树,而非 AVL 树、红黑树或 B 树等其他树?

InnoDB 是 MySQL 数据库的存储引擎之一,采用 B+ 树索引结构,而非 AVL 树、红黑树或 B 树等其他树。B+ 树是一种多路平衡搜索树,每个节点可以有多个子节点,叶子节点之间有指针相连,适合磁盘存储,具有以下优点:

  1. 减少磁盘 I/O:B+ 树的非叶子节点只存储键值信息,而所有的实际数据都存储在叶子节点中。这使得每个节点可以包含更多的键值,从而减少树的高度,减少磁盘 I/O 次数。
  2. 适合范围查询:B+ 树的叶子节点通过指针相连,形成一个有序链表。这使得范围查询非常高效,可以通过顺序扫描叶子节点快速获取结果。
  3. 适合磁盘存储:B+ 树的节点是顺序存储的,适合磁盘存储。顺序存储可以利用磁盘的预读特性,提高检索效率。

相比之下,其他树结构在数据库索引中的应用有以下缺点:

  1. AVL 树:AVL 树是一种高度平衡的二叉搜索树,每次插入和删除操作都需要进行旋转以保持平衡。这些旋转操作在磁盘存储中会导致大量的随机 I/O,性能较差。
  2. 红黑树:红黑树是一种近似平衡的二叉搜索树,插入和删除操作的旋转次数较少,但仍然存在随机 I/O 的问题,不适合磁盘存储。
  3. B 树:B 树和 B+ 树类似,但 B 树的非叶子节点也存储数据,这使得每个节点能存储的键值数量减少,树的高度增加,导致更多的磁盘 I/O。但并不证明 B 树不适合磁盘存储,只是相对 B+ 树而言,B+ 树更适合磁盘存储,MongoDB 就是使用 B 树作为索引结构。

因此,InnoDB 选择使用 B+ 树作为索引结构,以提高数据库的检索效率和性能。