首页 > 数据库 >Java面试系列-MySQL面试题20道,InnoDB,索引类型,事务隔离级别,锁机制,MVCC,主从复制,慢查询,分区,连接池,事务管理,死锁,视图,临时表,备份和恢复,查询优化,主键索引和唯一键

Java面试系列-MySQL面试题20道,InnoDB,索引类型,事务隔离级别,锁机制,MVCC,主从复制,慢查询,分区,连接池,事务管理,死锁,视图,临时表,备份和恢复,查询优化,主键索引和唯一键

时间:2024-11-07 10:46:48浏览次数:3  
标签:事务 分区 查询 索引 死锁 答案 MySQL

文章目录

Gitee链接地址,建议收藏,后续我会对专栏进行整理,每篇文章进行校正和调整,然后统一存放在gitee仓库中

1. MySQL中的InnoDB和MyISAM存储引擎有什么区别?

答案

  • 事务支持
    • InnoDB:支持事务,提供ACID(原子性、一致性、隔离性、持久性)特性。
    • MyISAM:不支持事务。
  • 锁定机制
    • InnoDB:支持行级锁定,适合高并发场景。
    • MyISAM:支持表级锁定,适合读多写少的场景。
  • 外键支持
    • InnoDB:支持外键约束。
    • MyISAM:不支持外键约束。
  • 全文索引
    • InnoDB:从MySQL 5.6开始支持全文索引。
    • MyISAM:支持全文索引。
  • 存储方式
    • InnoDB:数据和索引分开存储。
    • MyISAM:数据和索引分开存储。

2. MySQL中的索引类型有哪些?

答案

  • B-Tree索引:最常见的索引类型,适用于大部分场景。
  • Hash索引:适用于等值查询,不支持范围查询和排序。
  • 全文索引:用于全文搜索,支持全文检索。
  • 空间索引:用于地理空间数据,支持空间查询。
  • 位图索引:适用于布尔值或少量不同值的列。

3. MySQL中的索引是如何工作的?

答案

  • 索引结构:索引通常使用B-Tree结构,每个节点包含多个键值和指向子节点的指针。
  • 索引查找:通过索引树从根节点开始,逐层向下查找,直到找到叶子节点。
  • 索引维护:插入、删除和更新操作会维护索引树的平衡,确保索引的有效性。
  • 索引优化:合理设计索引,避免过度索引,减少索引的维护开销。

4. MySQL中的事务隔离级别有哪些?

答案

  • READ UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更。
  • READ COMMITTED:允许读取已经提交的数据变更,避免脏读。
  • REPEATABLE READ:对同一数据的多次读取结果相同,避免不可重复读。
  • SERIALIZABLE:最高的隔离级别,完全避免了幻读、不可重复读和脏读,但性能较低。

5. MySQL中的锁机制有哪些?

答案

  • 表锁:锁定整个表,适用于读多写少的场景。
  • 行锁:锁定表中的某一行,适用于高并发场景。
  • 意向锁:表示对表的锁定意图,分为意向共享锁(IS)和意向排他锁(IX)。
  • 共享锁:允许多个事务同时读取数据,但不允许写入。
  • 排他锁:只允许一个事务访问数据,禁止其他事务读取或写入。

6. MySQL中的MVCC(多版本并发控制)是如何工作的?

答案

  • 版本链:每个事务看到的数据版本是不同的,通过版本链记录数据的历史版本。
  • 快照读:非锁定读操作(如SELECT)使用快照读,读取数据的历史版本。
  • 当前读:锁定读操作(如SELECT … FOR UPDATE)使用当前读,读取数据的最新版本。
  • 垃圾回收:定期清理不再需要的历史版本,释放存储空间。

7. MySQL中的主从复制是如何工作的?

答案

  • 二进制日志:主库将所有更改记录到二进制日志(binlog)中。
  • IO线程:从库的IO线程连接到主库,读取binlog并保存到本地的中继日志(relay log)中。
  • SQL线程:从库的SQL线程读取中继日志,执行其中的SQL语句,将数据同步到从库。
  • 半同步复制:通过插件实现,确保主库的更改被至少一个从库确认后再提交。

8. MySQL中的分区表是如何工作的?

答案

  • 分区类型:包括范围分区、列表分区、哈希分区和键分区。
  • 分区策略:根据分区键将数据分散到不同的物理分区中。
  • 查询优化:查询时只需扫描相关的分区,提高查询性能。
  • 维护:可以通过添加、删除和重组分区来管理数据。

9. MySQL中的慢查询日志是如何工作的?

答案

  • 配置:通过配置文件或命令设置慢查询日志的阈值和日志文件路径。
  • 记录:当执行时间超过阈值的查询会被记录到慢查询日志中。
  • 分析:通过分析慢查询日志,可以找出性能瓶颈,优化查询。

10. MySQL中的连接池是如何工作的?

答案

  • 连接复用:连接池预先创建并维护一组数据库连接,应用程序可以从连接池中获取连接,使用完毕后归还连接。
  • 连接管理:连接池负责管理连接的生命周期,包括连接的创建、销毁和回收。
  • 性能优化:通过连接复用,减少连接创建和销毁的开销,提高应用程序的性能。

11. MySQL中的索引优化有哪些技巧?

答案

  • 合理选择索引列:选择查询中经常使用的列作为索引列。
  • 避免过度索引:过多的索引会增加写操作的开销,影响性能。
  • 前缀索引:对于长字符串列,可以使用前缀索引。
  • 联合索引:合理使用联合索引,注意索引列的顺序。
  • 索引覆盖:尽可能使用索引覆盖查询,避免回表查询。

12. MySQL中的事务管理是如何实现的?

答案

  • 事务开始:通过START TRANSACTIONBEGIN命令开始一个事务。
  • 事务提交:通过COMMIT命令提交事务,将更改永久保存到数据库。
  • 事务回滚:通过ROLLBACK命令回滚事务,撤销所有未提交的更改。
  • 保存点:通过SAVEPOINT命令设置保存点,可以在事务中部分回滚。

13. MySQL中的死锁是如何产生的,如何解决?

答案

  • 死锁产生:多个事务互相等待对方持有的锁,形成循环等待。
  • 检测:MySQL会定期检测死锁,一旦发现死锁,会回滚其中一个事务。
  • 预防
    • 合理设计事务:尽量减少事务的持有锁时间。
    • 锁顺序:确保所有事务按相同的顺序获取锁。
    • 超时设置:设置事务的超时时间,避免长时间等待。

14. MySQL中的存储过程和函数有什么区别?

答案

  • 存储过程
    • 用途:执行一组SQL语句,可以有输入参数和输出参数。
    • 调用:通过CALL命令调用存储过程。
  • 函数
    • 用途:返回一个值,通常用于计算和转换。
    • 调用:可以在SQL语句中直接调用函数。

15. MySQL中的视图是如何工作的?

答案

  • 定义:视图是一个虚拟表,基于一个或多个表的查询结果。
  • 查询:通过视图可以查询和操作底层表的数据。
  • 优点
    • 简化查询:通过视图可以简化复杂的查询。
    • 安全性:可以限制用户对底层表的访问权限。
  • 性能:视图的性能取决于底层查询的复杂度。

16. MySQL中的临时表是如何工作的?

答案

  • 作用:临时表用于存储临时数据,通常在会话期间使用。
  • 生命周期:临时表只在当前会话中可见,会话结束后自动删除。
  • 类型:可以是内存临时表或磁盘临时表,根据数据量和配置自动选择。
  • 性能:内存临时表的性能优于磁盘临时表。

17. MySQL中的备份和恢复有哪些方法?

答案

  • 物理备份
    • 文件系统备份:直接备份数据文件和日志文件。
    • LVM快照:使用LVM快照进行备份。
  • 逻辑备份
    • mysqldump:使用mysqldump工具导出SQL脚本。
    • mysqlpump:使用mysqlpump工具导出SQL脚本。
  • 恢复
    • 物理恢复:恢复数据文件和日志文件。
    • 逻辑恢复:执行导出的SQL脚本,恢复数据。

18. MySQL中的分区表如何优化查询性能?

答案

  • 分区裁剪:查询时只扫描相关的分区,减少扫描的数据量。
  • 并行查询:可以并行扫描多个分区,提高查询性能。
  • 分区维护:定期添加、删除和重组分区,保持数据的均衡分布。
  • 索引优化:在分区列上创建索引,提高查询性能。

19. MySQL中的查询优化有哪些技巧?

答案

  • 索引优化:合理使用索引,避免全表扫描。
  • 查询重写:优化查询语句,减少不必要的子查询和连接。
  • 缓存:使用查询缓存或应用级缓存,减少数据库访问。
  • 分页优化:使用覆盖索引和合理的分页策略,避免大量数据的传输。
  • 统计信息:定期更新统计信息,帮助优化器选择最优的查询计划。

20. MySQL中的主键和唯一键有什么区别?

答案

标签:事务,分区,查询,索引,死锁,答案,MySQL
From: https://blog.csdn.net/qq_41089021/article/details/143478890

相关文章

  • 高级SQL技巧:提升数据库性能与查询效率
    索引优化索引类型B树索引:B树索引适用于多种数据库操作,包括等值查询、范围查询和排序。B树索引通过将数据存储在一个平衡树结构中,允许快速的数据访问。B树索引的深度影响查询性能,因此,选择正确的索引列和维护索引的健康状况是至关重要的。例如,对于一个大型的电子商务数据库,对产......
  • activiti查询发起、待办、已办理列表
    目录一、实体类 二、服务实现类 三、数据访问层一、实体类创建接收结果集的实体类。代码如下:@Data@EqualsAndHashCode(callSuper=false)@Accessors(chain=true)@ApiModel(value="用户查询",description="查询用户待办、已执行、发起流程相信")public......
  • python+flask计算机毕业设计公共交通查询系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于公共交通查询系统的研究,现有研究主要以通用的交通查询功能开发为主,如一些常见的线路查询、站点查询等功能的实现。专门针对提升公......
  • MySQL 字符串索引和前缀索引
    前缀索引创建前缀索引altertabletaddindexidx_email(email);altertabletaddindexidx_email(email(6));使用前缀索引,定义好长度,可以做到即节省空间,又不用额外增加太多查询成本。区分度建立索引时,区分度(不重复的值)越高越好。selectcount(distanceemail)fromt......
  • mysql 连接查询之内连接、外连接 代码示例
    mysql连接查询可以分为内连接与外连接,外连接又分为左外连接和右外连接,左外连接可以简称为左连接,右外连接可以简称为右连接表数据如下学生表:student学生课程:student_course内连接:将两表满足条件的记录进行笛卡尔乘积--以下3个查询等效,均为内连接select*fromstudentinn......
  • 【多线程奇妙屋】收藏多年的线程安全问题大全笔记(下篇) { 死锁问题 },笔记一生一起走,
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • MySQL 索引的底层实现原理与优化策略
    在数据库中,索引是提升查询性能的关键工具。MySQL中的索引机制可以显著加快数据检索速度,尤其在数据量庞大的情况下,合理使用索引可以使得原本耗时的操作变得高效。然而,滥用或错误地使用索引也可能对性能产生负面影响。本文将深入探讨MySQL索引的底层实现原理、常用类型及其......
  • 150道MySQL高频面试题,学完吊打面试官--InnoDB索引与MyISAM索引实现的区别+一个表中如
    前言本专栏为150道MySQL大厂高频面试题讲解分析,这些面试题都是通过MySQL8.0官方文档和阿里巴巴官方手册还有一些大厂面试官提供的资料。MySQL应用广泛,在多个开发语言中都处于重要地位,所以最好都要掌握MySQL的精华面试题,这也是面试官最喜欢问的,现在面试官在面试的时候更关......
  • 与zoomeye类似的搜索引擎有哪些?
    ZOOMEYE,学安全的人应该都不会太陌生,一个专注于网络空间的搜索引擎,能够扫描和索引全球范围内的设备、服务以及网络信息,提供有关互联网设备的详细信息。那么还有没有和ZOOMEYE类似的搜索引擎呢?当然是有的啦!我找到了几个和ZOOMEYE功能类似的搜索引擎:1.Shodan。2.360网络空间资产......
  • Sql(sql语句优化,索引设计优化)
    1.慢查询MySQL的慢查询日志可以记录执行时间超过阈值的SQL查询语句,所以我们可以利用该日志查找出哪些SQL语句执行效率差,从而对SQL语句进行优化。MySQL5.7以上版本可以通过SET命令来开启慢查询日志。SETGLOBALslow_query_log=ON;SETGLOBALlong_query_time......