一、 Mysql 索引
1.1 Mysql 如何实现的索引机制?
-
InnoDB 索引与 MyISAM 索引实现的区别是什么?
-
一个表中如果没有创建索引,那么还会创建 B+ 树吗?
1.2 说一下 B+ 树索引实现原理(数据结构)
-
聚簇索引与非聚簇索引 B+ 树实现有什么区别?
-
说一下 B+ 树中聚簇索引的查找(匹配)逻辑?
-
说一下 B+ 树中非聚簇索引的查找(匹配)逻辑?
-
-
一个 B+ 树中大概能存放多少条索引记录?
-
使用 B+ 树存储的索引 CRUD 执行效率如何?
-
什么是自适应哈希索引?
-
什么是 2-3 树 2-3-4 树?
1.3 为什么官方建议使用自增长主键作为索引?(说一下自增主键和字符串类型主键的区别和影响)
-
使用int自增主键后 最大 id 是 10,删除 id 10 和 9,再添加一条记录,最后添加的 id 是几?删除后重启 mysql 然后添加一条记录最后 id 是几?
1.4 索引的优缺点是什么?
-
使用索引一定能提升效率吗?
-
如果是大段文本内容,如何创建(优化)索引?
1.5 什么是聚簇索引?
-
一个表中可以有多个(非)聚簇索引吗?
-
聚簇索引与非聚集索引的特点是什么?
-
CRUD 时聚簇索引与非聚簇索引的区别是什么?
-
非聚簇索引为什么不存数据地址值而存储主键?
1.6 什么是回表操作?
-
什么是覆盖索引?
-
非聚集(聚簇索引)索引一定回表查询吗?
-
为什么要回表查询?直接存储数据不可以吗?
-
如果把一个 InnoDB 表的主键删掉,是不是就没有主键,就没办法进行回表查询了?
1.7 什么是联合索引,组合索引,复合索引?
-
复合索引创建时字段顺序不一样使用效果一样吗?
1.8 什么是唯一索引?
-
唯一索引是否影响性能?
-
什么时候使用唯一索引?
1.9 什么时候适合创建索引,什么时候不适合创建索引?
1.10 什么是索引下推?
1.11 有哪些情况会导致索引失效?
-
为什么 LIKE 以 % 开头索引会失效?
1.12 一个表有多个索引的时候,能否手动选择使用哪个索引?
-
如何查看一个表的索引?
-
能否查看到索引选择的逻辑?是否使用过 optimizer_trace?
-
多个索引优先级是如何匹配的?
1.13 使用 Order By 时能否通过索引排序?
-
通过索引排序内部流程是什么?
-
什么是双路排序和单路排序?
-
group by 分组和 order by 在索引使用上有什么区别?
1.14 如果表中有字段为 null,又被经常查询该不该给这个字段创建索引?
-
有字段为 null 索引是否会失效?
二 、MySQL 内部技术架构
2.1 Mysql 内部支持缓存查询吗?
-
mysql 8 为何废弃掉查询缓存?
-
替代方案是什么?
2.2 Mysql 内部有哪些核心模块组成,作用是什么?
-
MySQL 提示“不存在此列”是执行到哪个节点报出的?
2.3 一条 SQL 发送给 MySQL 后,内部是如何执行的?(说一下 MySQL 执行一条查询语句的内部执行过程?)
2.4 如果一张表创建了多个索引,在哪个阶段或模块进行的索引选择?
2.5 MySQL 支持哪些存储引擎?默认使用哪个?
2.6 MySQL 8.0 自带哪些存储引擎?分别是做什么的?
2.7 MySQL 存储引擎架构了解吗?
-
能否单独为一张表设置存储引擎?
-
阿里、京东等大厂都有自研的存储引擎,如何开发一套自己的?
2.8 MyISAM 和 InnoDB 的区别是什么?
-
具体说一下如何做技术选型?
三 、MySQL 事务
3.1 什么是数据库事务?事务的特性是什么?
-
什么是 ACID?
3.2 并发事务会有哪些问题?
-
什么是脏读?
-
什么是丢失修改?
-
什么是不可重复读?
-
什么是幻读?
3.3 不可重复读和幻读有什么区别?
3.4 MySQL 是如何避免事务并发问题的?
-
什么是事务隔离级别?
-
默认的级别是什么?
-
如何选择事务隔离级别?
3.5 靠缓存可以提升高事务隔离级别的性能吗?
3.6 MySQL 事务隔离是如何实现的?
-
什么是一致性非锁定读和锁定读?
-
说一下 MVCC 内部细节?
3.7 MySQL 事务一致性,原子性是如何实现的?
3.8 MySQL 事务的持久性是如何实现的?
3.9 表级锁和行级锁有什么区别?
-
什么是行级锁?MySQL 如何完成的?
-
什么是共享锁(读锁)?
-
什么是排它锁(写锁/独占锁)?
-
什么是意向锁?
-
InnoDB 支持哪几种锁?
-
当前读和快照读分别是什么?
3.10 什么是 XA 协议?
-
什么是 mysql xa 事务?
-
xa 事务与普通事务区别是什么?
-
什么是 2pc 3pc?
3.11 是否使用过 select for update?会产生哪些操作?
3.12 说一下 MySQL 死锁的原因和处理方法?
四 、Mysql 日志
4.1 MySQL 会产生几种日志?
-
binlog 作用是什么?
-
redolog 作用是什么?
-
undolog 作用是什么?
4.2 MySQL 日志是否实时写入磁盘?
-
bin log 刷盘机制是如何实现的?
-
redo log 刷盘机制是如何实现的?
-
undo log 刷盘机制是如何实现的?
4.3 MySQL 的 binlog 有有几种录入格式?分别有什么区别?
五、 MySQL 开发
5.1 可以使用 MySQL 直接存储文件吗?
-
什么时候存,什么时候不存?
-
存储的时候有遇到过什么问题吗?
-
Emoji 乱码怎么办?
-
5.2 如何存储 ip 地址?
5.3 长文本如何存储?
-
大段文本如何设计表结构?
-
大段文本查找时如何建立索引?
-
有没有在开发中使用过 TEXT,BLOB 数据类型?
5.4 日期,时间如何存取?
-
TIMESTAMP,DATETIME 的区别是什么?
-
为什么不使用字符串存储日期?
-
如果需要使用时间戳 timestamp和int该如何选择?
5.5 char 与 varchar 的区别?如何选择?
5.6 财务计算有没有出现过错乱?
-
decimal 与 float,double 的区别是什么?
-
浮点类型如何选型?为什么?
5.7 预编译 SQL 是什么?
-
预编译 SQL 有什么好处?
5.8 子查询与 join 哪个效率高?
-
为什么子查询效率低?
-
join 查询可以无限叠加吗?
-
如何优化过多 join 查询关联?MySQL 对 join 查询有什么限制吗?
-
join 查询算法了解吗?
5.9 是否有过 MySQL 调优经验?
-
开发中使用过哪些调优工具?
-
如何监控线上环境中执行比较慢的 SQL ?
-
如何分析一条慢 SQL?
-
如何查看当前 SQL 使用了哪个索引?
-
索引如何进行分析和调优?
-
EXPLAIN 关键字中的重要指标有哪些?
-
优化器为什么会在多个索引中选择一条?
-
5.10 MySQL数据库cpu飙升的话你会如何分析?
5.11 有没有进行过分库分表?
-
什么是分库分表?
-
什么时候进行分库分表?有没有配合es使用经验?
-
说一下实现分库分表工具的实现思路?
-
用过哪些分库分表工具?
-
分库分表后可能会有哪些问题?
-
说一下读写分离常见方案?