【MySQL面试题pro版-2】

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。

mysql的innodb和myisam索引区别

InnoDB和MyISAM是MySQL中的两种存储引擎,它们在事务处理、锁定级别、索引结构以及全文索引等方面存在区别:

  1. 事务处理:InnoDB支持事务处理,能够进行提交和回滚操作,而MyISAM不支持事务处理。
  2. 锁定级别:InnoDB支持行级锁,提供更高的并发性能;MyISAM仅支持表级锁,可能在执行写操作时导致整张表被锁定。
  3. 索引结构:InnoDB使用聚簇索引,数据文件和主键索引绑定在一起,通过主键索引的查询效率较高;MyISAM使用非聚簇索引,数据文件与索引分开存储。
  4. 全文索引:MyISAM支持全文索引,对于全文搜索有较好的性能;InnoDB直到MySQL 5.6版本才开始支持全文索引。
  5. 外键约束:InnoDB支持外键约束,用于保证数据的完整性;MyISAM不支持外键。
  6. 计数操作:MyISAM保存了表的行数,对SELECT COUNT(*)操作较快;InnoDB没有保存这个信息,需要全表扫描来计算行数。
  7. 恢复能力:系统崩溃后,MyISAM表的恢复相对困难;InnoDB因其事务日志而具有更好的恢复能力。
  8. 内存使用:InnoDB采用缓冲池来缓存数据和索引,减少磁盘I/O;MyISAM对内存的使用不如InnoDB高效。
  9. 自动提交:对于InnoDB,每条SQL语句默认封装成事务并自动提交,可以通过显式地使用BEGINCOMMIT来控制事务;而MyISAM不涉及事务的自动提交问题。

综上所述,InnoDB适合处理并发高及需要事务支持的场景,而MyISAM适合读取密集型的应用且不需要事务支持的情况。在选择存储引擎时,应考虑应用的具体需求,比如是否需要事务支持、并发访问量、是否需要全文索引等因素。

InnoDB引擎的4大特性

InnoDB引擎作为MySQL的默认存储引擎,拥有以下四大特性:

  1. 支持事务处理:InnoDB引擎支持完整的ACID事务,允许用户进行可靠的提交和回滚操作。这是通过其MVCC(多版本并发控制)机制以及强大的恢复能力实现的,确保了在并发环境下数据一致性和完整性。
  2. 外键约束:InnoDB支持外键约束,这有助于保持数据库中数据的参照完整性。通过外键可以创建一个表与另一个表之间的链接,确保数据的相关性和准确性。
  3. MVCC(多版本并发控制):InnoDB通过MVCC实现了非锁定读,这意味着在读取数据时不会对其进行锁定,从而允许其他事务同时对数据进行写入。这种机制提高了数据库在高并发情况下的性能。
  4. 行级锁定:InnoDB提供了行级锁定功能,相比于MyISAM的表级锁,行级锁可以更精细地控制并发访问,减少锁冲突,提高并发性能,特别适合于在线事务处理(OLTP)类型的应用。

除了上述特性,InnoDB还具有一个高度优化的缓冲池来减少磁盘I/O操作,以及聚集索引来提高主键查询的效率。这些技术特性共同作用,使得InnoDB成为处理大数据量和需要高并发访问场景下的理想选择。

插入缓存的合并频率是多少?

  1. 辅助索引页被读取到缓冲池中。正常的select先检查Insert Buffer是否有该非聚集索引页存在,若有则合并插入。
  2. 辅助索引页没有可用空间。空间小于1/32页的大小,则会强制合并操作。
  3. Master Thread 每秒和每10秒的合并操作。

二次写空间组成?

内存中的doublewrite buffer,大小2M。
物理磁盘上共享表空间中连续的128个页,即2个区(extend),大小同样为2M。
对缓冲池的脏页进行刷新时,不是直接写磁盘,而是会通过memcpy()函数将脏页先复制到内存中的doublewrite buffer,之后通过doublewrite 再分两次,每次1M顺序地写入共享表空间的物理磁盘上,在这个过程中,因为 doublewrite页是连续的,因此这个过程是顺序写的,开销并不是很大。在完成doublewrite页的写入后,再将 doublewrite buffer 中的页写入各个表空间文件中,此时的写入则是离散的。如果操作系统在将页写入磁盘的过程 中发生了崩溃,在恢复过程中,innodb可以从共享表空间中的doublewrite中找到该页的一个副本,将其复制到表空 间文件,再应用重做日志。

自适应hash索引有什么坏处

  1. hash自适应索引会占用innodb buffer pool。
  2. 自适应hash索引只适合搜索等值的查询,如select * from table where index_col=‘xxx’,而对于其他查找类型, 如范围查找,是不能使用的。
  3. 极端情况下,自适应hash索引才有比较大的意义,可以降低逻辑读。
  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

随缘而愈

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值