MySQL面试题

mysql优化

如何定位慢查询

  • 慢查询的原因:聚合查询,多表查询,表数据量过大查询,深度分页查询。表现为页面加载慢,接口响应慢

  • 定位方法:1,使用运维工具skywalking2,mysql自带的慢日志(mysql默认不开启,手动开启注意调试的时候才开,比较消耗性能)

  • 解决慢查询:1,在查询语句前加explain2,

MySQL索引

索引的概念

索引的底层数据结构是B+树

  • 在创建索引时就要排序,根据where条件决定走哪个索引

  • B+树叶子节点才存数据,叶子节点之间有双向指针,便于扫库、范围查询

聚簇索引,二级索引(非聚集索引),回表

  • 聚集索引:数据索引放一块。叶子节点保存整行数据。必须有只能有一个

    • 聚簇索引
  • 二级索引:数据索引分开放。叶子节点保存的主键。可有多个

  • 回表查询:先通过二级索引找到主键,再到聚集索引里找到整行的数据,使用了两次索引查询

  • 覆盖索引:查询用了索引,在一个索引里就能找到想要的所有数据,就使用了一次索引

  • MySQL超大分页处理:覆盖索引+子查询

索引创建原则

  • 答题方式

    • 在实际工作中是怎么用的

    • 主键索引

    • 唯一索引

    • 根据业务创建的索引(复合索引)

  • 重点

    • 数据量大,查询还频繁

    • 针对于where,order by,group by操作字段创立索引

    • 尽量使用联合索引

    • 控制索引数量

索引失效

自己想一想自己遇到的情况,不要上来就背,适当思考,回想,更真实。可以使用explain判断是否失效

  • 违反最左前缀原则(用到的是复合索引联合)

  • 范围查询右边的列,不能使用索引

  • 在索引上运算会失效

  • 字符串不加单引号会造成失效,类型转换会导致

  • %开头的like模糊查询,可能失效

MySQL优化经验

表的设计优化,参考阿里开发手册《山高山版》

join优化,以小表为基础,小表放在外面循环

MySQL事务相关

  • 事务特性

    • 事务是一组操作的集合,一个不可分割的工作单位。同时成功,要么同时失败

    • ACID:

      • 原子性:要么都成功要么都失败

      • 一致性:数据保持一致

      • 隔离性:不受其他并发操作影响

      • 持久性:事务提交或回滚对数据库中数据的改变是永久的

并发事务会带来问题:脏读(读到另一个事务还没提交的数据),不可重复读(一个事务连读两次,数据不一样),幻读(查询没有,插入又说有。因为解决了前面的不可重复读,)

  • 解决方法:隔离。

    • 隔离级别有。默认使用可重复读。串行化最安全但效率太低了

    • undo log:记录数据被修改前的信息,一致性,原子性,作用包括:回滚(插入),mvcc(更新,删除)

    • redo log:记录事务提交时数据页的物理修改,实现事务持久性,服务器宕机,用来恢复数据

    • 缓冲池(buffer pool):当一个缓存来,先操作内存中的缓冲池,

    • 数据页:放在磁盘中

    • 隔离性由:锁,mvcc保证

  • mvcc多版本并发控制:维护一个数据的多个版本,使得读写操作没有冲突

    • 多个事务并发,到底访问哪个版本。

    • mvcc实现依赖于:隐式字段,undo log日志,readview

      • 实现原理:
    • undolog版本链:修改记录的链子

    • readview快照读

    • 当前读:最新记录,会加锁

    • 快照读:没加锁,

分库分表

相关推荐
、BeYourself2 小时前
✅ 宝塔 PostgreSQL 安装 contrib 扩展完整指南
数据库·postgresql·springai
枫叶丹42 小时前
【Qt开发】Qt系统(二)-> 事件分发器
c语言·开发语言·数据库·c++·qt·系统架构
代码游侠3 小时前
复习—sqlite基础
linux·网络·数据库·学习·sqlite
计算机毕设VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue小区人脸识别门禁系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
@小码农3 小时前
202512 电子学会 Scratch图形化编程等级考试三级真题(附答案)
服务器·开发语言·数据结构·数据库·算法
哈里谢顿3 小时前
MySQL + Redis 协同 示例
redis·mysql
烂漫心空4 小时前
Windows 系统如何使用 Mysql 服务
数据库·mysql
是Yu欸4 小时前
vLLM 0.11.0 新特性解析:视觉推理精度跃升与长序列性能革新
数据库·qwen·昇腾·npu·vllm
不屈的铝合金4 小时前
MySQL 数据库服务多实例部署指南
运维·数据库·mysql·多实例部署·维度隔离