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
相关推荐
编程之路从0到141 分钟前
ReactNative新架构之Android端TurboModule机制完全解析
android·react native·源码阅读
chuxinweihui43 分钟前
MySQL数据库基础
数据库·mysql
无敌的牛1 小时前
MySQL基础
数据库·mysql
iloveAnd2 小时前
Android开发中痛点解决(二)兼容性:AndroidX和gradle版本的兼容性
android·兼容性·androidx
stevenzqzq2 小时前
DataStore基本使用教程
android
鱼跃鹰飞2 小时前
面试题:解释一下什么是全字段排序和rowid排序
数据结构·数据库·mysql
Dxy12393102162 小时前
MySQL连表查询讲解:从基础到实战
数据库·mysql
a努力。2 小时前
字节跳动Java面试被问:一致性哈希的虚拟节点和数据迁移
java·开发语言·分布式·算法·缓存·面试·哈希算法
LawrenceMssss3 小时前
由于创建一个完整的App涉及到多个层面(如前端、后端、数据库等),并且每种语言通常有其特定的用途(如Java/Kotlin用于Android开发,Swift/Objective-C用于iOS开发,Py
android·java·ios
五花肉.3 小时前
C#面试核心考点和回答要点
面试·c#