百度做的网站后台怎么进,广告联盟网站建设,凌河锦州网站建设,首钢建设集团山东公司网站面试数据库八股文十问十答第七期 作者#xff1a;程序员小白条#xff0c;个人博客 相信看了本文后#xff0c;对你的面试是有一定帮助的#xff01;关注专栏后就能收到持续更新#xff01;
⭐点赞⭐收藏⭐不迷路#xff01;⭐
1#xff09;索引是越多越好吗#xff…面试数据库八股文十问十答第七期 作者程序员小白条个人博客 相信看了本文后对你的面试是有一定帮助的关注专栏后就能收到持续更新
⭐点赞⭐收藏⭐不迷路⭐
1索引是越多越好吗
不是的。虽然索引可以加快数据的检索速度但是索引也会增加数据库的存储空间和维护成本。过多的索引会增加写操作的开销因为每次对数据进行修改时都需要更新索引。此外索引还会增加查询优化器的选择成本并且在某些情况下过多的索引可能会导致性能下降因为查询优化器可能会选择错误的索引。因此建立索引需要根据实际的查询需求和数据库的特点来进行权衡和选择。
2你能说说在 B 树层面查询数据的全过程吗越详细越好
B 树是一种常用于数据库索引结构的数据结构其查询数据的全过程可以分为以下几个步骤
根据查询条件在根节点进行查找从根节点开始根据查询条件找到对应的索引键或者索引范围。根据索引键或者范围找到对应的叶子节点在非叶子节点中根据索引键的值找到对应的子节点直到达到叶子节点。叶子节点保存了数据行的指针或者数据页的地址。在叶子节点中进行查找在叶子节点中根据索引键的值找到对应的数据行的指针或者数据页的地址。如果需要进行回表操作如果查询的列不在索引中需要根据数据行的指针或者数据页的地址到数据页中获取数据。
3为什么要用 B 树
B 树作为一种常用的索引结构在数据库系统中有着广泛的应用主要有以下几个原因
平衡性B 树是一种平衡树结构保证了树的高度较低从而保证了在最坏情况下的查询、插入和删除操作的时间复杂度为 O(logN)。有序性B 树的叶子节点构成了有序的链表这样可以很方便地进行范围查询和范围扫描。可扩展性B 树支持动态的插入和删除操作同时保持树的平衡性使得数据库系统能够动态地适应数据的变化。适应性B 树适用于磁盘存储可以很好地利用磁盘的预读特性减少磁盘IO操作提高查询性能。支持多种操作B 树不仅支持等值查询还支持范围查询、范围扫描等多种操作可以满足数据库系统中各种复杂的查询需求。
4MySQL 是如何实现事务的
MySQL 使用了多种技术来实现事务的支持其中最重要的是以下两种
事务日志Redo LogMySQL 使用事务日志来保证事务的持久性。在事务提交之前将事务的修改操作记录到事务日志中然后再将这些修改写入到磁盘上的数据页中。在数据库发生崩溃或者重新启动时MySQL 可以通过重放事务日志来恢复未完成的事务保证事务的持久性。Undo LogMySQL 使用 Undo Log 来支持事务的回滚和 MVCC。在事务执行过程中将事务的修改操作记录到 Undo Log 中然后再将这些修改写入到磁盘上的数据页中。如果事务需要回滚可以通过 Undo Log 将数据恢复到事务开始之前的状态。
除了以上两种技术之外MySQL 还使用了锁机制来保证事务的并发控制。通过对数据行、索引、表等级别的锁来控制并发事务的访问保证事务的隔离性和一致性。
5MySQL 长事务会造成什么问题
长事务可能会导致以下几个问题
锁资源占用长事务持有的锁资源会长时间占用导致其他事务无法访问或修改相关数据从而降低数据库的并发性能。内存占用增加长事务中的未提交数据需要占用 Undo Log长时间运行的事务会增加 Undo Log 的使用量占用大量内存空间导致内存压力增加。版本链增长长事务持续修改数据会生成大量的版本链增加数据库的存储空间和维护成本。数据一致性问题长事务可能会导致数据库中出现脏数据或者不一致的数据影响数据库的一致性和可靠性。
因此为了避免以上问题应尽量避免设计长时间运行的事务或者将长事务拆分成多个短事务减少事务持有锁资源和占用内存空间的时间。
6什么是 MVCC
MVCCMulti-Version Concurrency Control多版本并发控制是一种用于实现数据库的并发控制的技术。在 MVCC 中每个事务在读取数据时会看到一个固定版本的数据并且事务之间的修改操作不会互相影响。
MVCC 的主要思想是为每个事务创建一个可见性视图该视图定义了事务可以看到哪些数据版本。当事务开始时MVCC 会为该事务创建一个时间戳并在事务执行过程中使用该时间戳来确定事务可以看到的数据版本。当事务提交或者回滚时MVCC 会更新事务的时间戳并清理过期的数据版本。
MVCC 可以提高数据库的并发性能减少事务之间的互相干扰同时也能够提高数据库的可靠性和一致性。MySQL 中的 InnoDB 存储引擎就使用了 MVCC 技术来支持事务的并发控制。
7如果没有 MVCC 怎么办
如果没有 MVCC数据库可以使用其他并发控制技术来确保事务的隔离性和一致性例如使用锁来控制并发访问。在没有 MVCC 的情况下数据库可能会采用更加保守的锁机制例如在读取数据时对数据行进行加锁以防止其他事务对数据进行修改。
8MySQL 有几种事务隔离级别
MySQL 支持以下四种事务隔离级别
读未提交Read Uncommitted事务可以读取其他事务未提交的数据。这是最低级别的隔离级别可能会导致脏读、不可重复读和幻读的问题。读提交Read Committed事务只能读取其他事务已经提交的数据。这是 MySQL 的默认隔离级别。可重复读Repeatable Read事务在整个事务期间可以多次读取相同的数据并且保证这些数据不会发生变化。这可以防止不可重复读问题但仍然可能发生幻读问题。串行化Serializable最高级别的隔离级别确保事务串行执行以避免任何并发问题。虽然可以避免脏读、不可重复读和幻读问题但会降低数据库的并发性能。
9MySQL 的默认事务隔离级别是什么为什么
MySQL 的默认事务隔离级别是 读提交Read Committed。这个隔离级别提供了一种良好的平衡既可以避免脏读问题又能够在大多数情况下保证较好的并发性能。
10脏读、不可重复读、幻读分别是什么
脏读Dirty Read一个事务读取了另一个事务未提交的数据。如果另一个事务回滚那么读取的数据就是无效的。不可重复读Non-Repeatable Read一个事务内多次读取同一数据但是由于其他事务的修改每次读取的数据可能都不一样。这种情况下事务读取的数据是不一致的。幻读Phantom Read一个事务在读取某个范围的数据时另一个事务插入了新的数据行导致第一个事务再次读取该范围时发现数据行的数量或者内容发生了变化。这种情况下事务读取的数据不符合预期就像出现了幻觉一样。
这些问题在并发环境下可能会出现而不同的事务隔离级别决定了数据库如何处理这些问题。
开源项目地址https://gitee.com/falle22222n-leaves/vue_-book-manage-system
前后端总计已经 1300 Star2W 访问
⭐点赞⭐收藏⭐不迷路⭐