MySQL面试知识汇总

学习链接

  1. 创建索引有哪些注意点?
  1. 索引应该建在查询频繁的字段,比如where查询、order排序
  2. 索引的个数应该适量(最多64个),索引需要占用空间,更新时也需要维护
  3. 区分度低的字段,例如性别,不要建索引
  4. 频繁更新的值,不要作为索引,维护索引文件需要成本,还会导致页分裂、IO次数增多
  5. 联合索引把散列性高的值放在前面,可以更好的满足最左前缀匹配原则
  6. 尽可能用联合索引代替多个单列索引
  7. 过长的字段,使用前缀索引,即截取字段的前面一部分内容建立索引
  8. 不建议用无序的值作为索引
  1. 索引哪些情况下会失效?
  1. 查询条件包含or,可能会导致索引失效
  2. 如果字段类型是字符串,where时一定用引号括起来,否则会因为隐式类型转换,索引失效
  3. like通配符可能导致索引失效
  4. 联合索引,查询时的条件不是联合索引中的第一个列,索引失效
  5. 在索引列上使用mysql的内置函数,索引失效
  6. 对索引列运算(如:加减乘除、!= /<> /not in),索引失效
  7. 索引字段上使用 is null is not null,可能会导致索引失效
  8. 左连接查询或者右连接查询 查询关联的字段编码格式不一样,可能导致索引失效
  9. MySQL优化器估计使用全表扫描要不使用索引快时,不适应索引
  1. 解释下MySQL上事务的四大特性ACID,及实现
  1. 原子性::redo log(被称为重做日志,是物理日志,事务提交时,必须先将事务的所有日志写入redo log持久化)
  2. 一致性:undo log(是逻辑日志,记录了事务的insert、update和delete操作,回滚时执行相反的操作)
  3. 隔离性:数据库锁及MVCC机制
  4. 持久性:redo log
  1. 事务的各个隔离级别都是如何实现的?
  1. 读未提交
  2. 读已提交
  3. 可重复读
  4. 串行化
  1. MySQL 主从同步延迟怎么处理?

原因:当数据库主库有较大更新并发操作时,可能会导致主从同步延迟,因为从库里面读取binlog的线程只有一个,当某个SQL在从库中执行的时间稍长,或者由于某个SQL要进行锁表就会导致主从同步延迟,主库的SQL大量积压,未被同步到从库里。就会导致主从不一致,即主从延迟。

主从同步延迟的解决方法:

  1. 写操作后的读操作指定发给数据库主库
  2. 读从库失败后,再读一次主库
  3. 关键业务读写操作全部指向主库,非关键业务采取读写分离
  1. 水平分表有哪几种路由方式?
  1. 范围路由:选取有序的数据列作为路由的条件,不同分段分散到不同的数据库表中;(单表数据量在 100w~1000w)
  2. Hash路由:选取某个列(或者某几个列组合)的值进行Hash运算,然后根据Hash结果分散到不同的数据库表中。(缺点:初始表的数量选取不好确定,且扩容比较麻烦)
  3. 配置路由:用一张独立的表来记录路由信息。(缺点是必须多查一次)
  1. 分库分表如何实现不停机扩容?
  1. 第一步:在线双写,查询走老库
    >

  2. 第二步:在线双写,查询走新库

  3. 第三步:旧库下线

  1. 分库分表会带来哪些问题?

分库的角度:

  1. 事务的问题
  2. 跨库JOIN问题:1. 代码层面关联 2. 数据异构:同步到ES的大宽表

分表的角度:

  1. 跨节点的count、order by、group by以及聚合函数问题
  2. 数据迁移、容量规划、扩容等问题
  3. ID问题
  1. 数据库CPU飙升怎么解决?
  1. xxxx
相关推荐
好的佩奇6 小时前
蓝牙之通信架构
android·flutter·蓝牙
FlightYe7 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
利威尔xu7 小时前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
诸神黄昏EX8 小时前
Android fw BatteryService
android
幽灵诶8 小时前
Mysql(基于测试的学习)
数据库·mysql
alexhilton8 小时前
提升 Android Compose 页面的流畅度
android·kotlin·android jetpack
利威尔xu8 小时前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang
宇宙无敌暴龙战士6668 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
猿究院_夏燊8 小时前
MySQL 的四种隔离级别
java·数据库·mysql
撩得Android一次心动9 小时前
Android中Gradle网络下载超时、更改存放位置(解决方案)
android·gradle