Java面试八股文(2023最新)--MySQL面试题

文章详细介绍了MySQL中的核心概念,包括DDL、DML、DCL的区别,ACID事务特性,InnoDB与MyISAM存储引擎的差异,各种类型的索引,以及索引优化策略。此外,还讨论了事务隔离级别,数据恢复方法,以及数据库设计规范。文章强调了性能优化,如使用索引和事务处理对数据库读写性能的影响。
摘要由CSDN通过智能技术生成

目录

1. DDL,DML,DCL的区别?

2. ACID是什么?事务是什么?

3. InnoDB和MyISAM的区别

4. 索引有哪些类型?

5. 为什么InnoDB存储引擎选用B+树而不是B树?

6. 什么情况索引会失效?

7. MySQL排查问题的手段有哪些?

8. MySQL性能优化方式?

9. SQL内连接和外连接的区别?

10. MySQL有哪些搜索引擎?

11. 百万数据如何快速查询?

12. 数据库三范式?

13. 索引如何优化?

14. MySQL的事务隔离级别?        并发情况下引起的问题:

15. MySQL怎么恢复半月前的数据?

16. MySQL有哪些部分组成,分别用来做什么?

 17. MySQL中有哪几种锁?

18. char和varchar的区别?

19. 可以使用多少列创建索引

20. MySQL支持事务吗?

21. 简单描述下MySQL中,索引,主键索引,唯一索引,联合索引的区别,对数据库有什么影响(读写方面)

22. 哪种count性能最好?

23. MySQL存储IP地址?

24. select语句的完整执行流程顺序

25. 数据库设计规范

25. 聚簇索引和非聚簇索引的区别?


1. DDL,DML,DCL的区别?

  • DDL:数据定义语言: 一般用来堆数据库表进行结构调整,例如: Create, Drop, Alter
  • DML:数据操作语言: 对数据进行增删改查操作,Insert,Delete,Update,Select
  • DCL:数据控制语言: grant, commit, rollback

2. ACID是什么?事务是什么?

A(Atomictiy ): 原子性,  事务要么被全部执行,要么全不执行

C(Consistency): 一致性,  事务执行使得数据库从一种正确状态转换到另一种正确状态

I(ISolation): 隔离性,  在事务正确提交前, 不允许把该事务对数据的改变提供给其他事物

D(Durability): 持久性,  事务正确提交后,永久保存在数据库, 即使事务提交后有其他故障, 事务处理结果也会保存.

可以这么理解事务: 事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组 如果任何一个语句操作失败,那么整个操作被失败,以后操作就会有回滚到操作前的状态,或者上一节点. 为了确保要么执行,要么不执行,可以使用事务. 要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性,持久性.

事务: 事务是作为一个单元的一组有序的数据库操作,组中所有的数据成功,则事务操作成功,组中有一个失败,则事务不成功. 所有操作完成,则事务提交,其修改将作用于所有其他数据库进程. 如果一个操作失败, 则事务回滚, 该事务的所有操作将被取消.

3. InnoDB和MyISAM的区别


MySQL默认InnoDB存储引擎,它的事务隔离级别为可重复读,适合比较庞大的应用场景.

4. 索引有哪些类型?

  • 数据结构角度
    • 树索引
    • Hash索引
  • 物理存储角度
    • 聚集索引
    • 非聚集索引
  • 逻辑角度
    • 普通索引
    • 唯一索引
    • 主键索引
    • 联合索引

5. 为什么InnoDB存储引擎选用B+树而不是B树?

  • B+树是基于B树和叶子节点顺序访问指针进行的,它具有B树的平衡性,并且通过顺序访问指针来提高区间查询的性能.
  • 在B+树中,一个节点中的key从左到右非递减排列,如果某个指针的左右相邻key分别是key i和key i+1,并且不为null,则该指针指向节点的所有key大于等于key i 且小于等于key i+1.
  • 进行查找操作时,首先在根节点进行二分查找,找到一个key所在的指针,然后递归地在指针所指向的节点进行查找.直到查到叶子节点,然后在叶子节点上进行二分查找,找出key所对应的data.
  • 总结:用B+树不用B树考虑的是IO对性能的影响,B树的每个节点都会存储数据,而B+树只有叶子节点才存储数据,所以查找相同的数据量的情况下,B树的高度就会更高,IO更加频繁,数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)

6. 什么情况索引会失效?

  • 索引列参与表达式计算: select   'sname'   from   'stu'   where  'age'+10 = 50;
  • 函数运算: select   'sname'   from   'stu'   where  left('date',4) >  2000;
  • %在前的 模糊查询:  select  'sname'  from   'stu'  where  'sname'  like  '%张';  -- 不走索引
  • 字符串与数字比较:  select  *   from   'stu'  where  'phone'  =  1888   --不走索引
  • 查询条件中有or,即使其中有条件字段带索引也不会走索引,除非所有条件字段都带索引:  
  • 正则表达式不走索引
  • MySQL优化器不使用索引

7. MySQL排查问题的手段有哪些?

  • 使用Explain 查询SQL执行计划
  • 开启慢查询日志,查看慢查询的SQL
  • 使用show processlist  查看当前所有的连接信息

8. MySQL性能优化方式?

  • 服务器优化(更换高性能cpu,内存,网络,磁盘等硬件)
  • 表设计的优化: 字段长度控制.增加必要的索引
  • SQL优化:  避免SQL不命中索引的情况
  • 架构部署优化: 一主多从集群的方式部署
  • 编码优化实现读写分离

9. SQL内连接和外连接的区别?

  • 内连接: inner join 或 join 利用了where子句对多表连接形成的笛卡尔积进行筛选,说白了内连接就是获取两个表之间的公共部分
  • 左外连接: 获取左表的内容使用左外
  • 右外连接: 获取右表的内容使用右外

10. MySQL有哪些搜索引擎?

  • InnoDB: 它是一个事务安全的存储引擎,它具备提交,回滚以及崩溃恢复的功能用于保护用户数据,InnoDB的行级锁定以及Oracle风格的一致性无锁读提升了它的多用户并发数及性能.InnoDB将用户数据存储在聚集索引以减少查询带来的IO开销,为了保证数据的完整性,InnoDB还支持外键约束
  • MyISAM:它既不支持事务也不支持外键,优点是访问速度快,但是表级别的锁定限制了它在读写负载方面的性能,因此它经常用于只读或者以读为
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

月月崽

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

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

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

打赏作者

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

抵扣说明:

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

余额充值