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快照读

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

    • 快照读:没加锁,

分库分表

相关推荐
怣501 天前
MySQL多表连接:全外连接、交叉连接与结果集合并详解
数据库·sql
wjhx1 天前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
冰暮流星1 天前
javascript之二重循环练习
开发语言·javascript·数据库
万岳科技系统开发1 天前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
冉冰学姐1 天前
SSM智慧社区管理系统jby69(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·管理系统·智慧社区·ssm 框架
杨超越luckly1 天前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
斯普信专业组1 天前
构建基于MCP的MySQL智能运维平台:从开源服务端到交互式AI助手
运维·mysql·开源·mcp
Elastic 中国社区官方博客1 天前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
仍然.1 天前
MYSQL--- 聚合查询,分组查询和联合查询
数据库
一 乐1 天前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端