没有合适的资源?快使用搜索试试~ 我知道了~
2023最新版Mysql面试题总结,来自大厂的宝典经验.pdf
需积分: 1 2 下载量 5 浏览量
2023-08-22
10:23:42
上传
评论
收藏 393KB PDF 举报
温馨提示
试读
32页
2023最新版Mysql面试题总结,来自大厂的宝典经验.pdf 非常全面!
资源推荐
资源详情
资源评论
2023 最新版 Mysql 面试总结,来自大厂的宝
典经验
文章目录
o 1、索引
o
1.1
简介
1.2
索引的数据结构为什么是
B+Tree
和
HASH
?
1.2.1
二叉树
1.2.2
红黑树
1.2.3 B-Tree
1.2.4 B+Tree(B-Tree
变种
)
1.2.5 Hash
1.3
索引的类型
1.3.1 MySQL 的存储引擎
1.3.1.1 InnoDB 存储引擎索引实现(聚集)
1.3.1.2 MyISAM 存储引擎索引实现(非聚集)
1.3.1.3
联合索引
1.4 索引使用的情况
1.4.1 EXPLAIN 关键字
1.5 索引失效的情况
1.5.1 为什么主键要设置成自增的?
1.5.2 建表上的优化
1.5.3 索引失效的案例
o 2、建表规约(阿里巴巴开发手册)
o
2.1【强制】表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned
tinyint
(
1
表示是,
0
表示否)。
2.2【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划
线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名
称需要慎重考虑。
2.3【强制】表名不使用复数名词。
2.4【强制】禁用保留字,如 desc、range、match、delayed 等,请参考 MySQL 官方
保留字。
2.5【强制】主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_
字段名。
2.6【强制】小数类型为 decimal,禁止使用 float 和 double。
2.7【强制】如果存储的字符串长度几乎相等,使用 char 定长字符串类型。
2.8【强制】varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果
存储长度大于此值,定义字段类型为
text
,独立出来一张表,用主键来对应,避免影响
其它字段索引效率。
2.9【强制】表必备三字段:id, gmt_create, gmt_modified。
2.10【推荐】表的命名最好是遵循“业务名称_表的作用”。
2.11.【推荐】库名与应用名称尽量一致。
2.12【推荐】如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。
2.13【推荐】字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵
循:
2.14【推荐】单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
2.15【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是
提升检索速度。
o 3
、索引规约(阿里巴巴开发手册)
o
3.1【强制】业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。
3.2【强制】超过三个表禁止 join。需要 join 的字段,数据类型保持绝对一致;多表关
联查询时,保证被关联的字段需要有索引。
3.3【强制】在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索
引,根据实际文本区分度决定索引长度。
3.4【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。
3.5【推荐】如果有 order by 的场景,请注意利用索引的有序性。order by 最后的字段
是组合索
3.6【推荐】利用覆盖索引来进行查询操作,避免回表。
3.7【推荐】利用延迟关联或者子查询优化超多分页场景。
3.8【推荐】SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,如果可
以是 consts 最好。
3.9【推荐】建组合索引的时候,区分度最高的在最左边。
3.10【推荐】防止因字段类型不同造成的隐式转换,导致索引失效。
3.11【参考】创建索引时避免有如下极端误解:
o 4
、
SQL
语句(阿里巴巴开发手册)
o
4.1
【强制】不要使用
count(
列名
)
或
count(
常量
)
来替代
count(*)
,
count(*)
是
SQL92
定
义的标准统计行数的语法,跟数据库无关,跟
NULL
和非
NULL
无关。
4.2
【强制】
count(distinct col)
计算该列除
NULL
之外的不重复行数,注意
count(distinct
col1, col2)
如果其中一列全为
NULL
,那么即使另一列有不同的值,也返回为
0
。
4.3
【强制】当某一列的值全是
NULL
时,
count(col)
的返回结果为
0
,但
sum(col)
的返
回结果为
NULL
,因此使用
sum()
时需注意
NPE
问题。
4.4
【强制】使用
ISNULL()
来判断是否为
NULL
值。
4.5
【强制】代码中写分页查询逻辑时,若
count
为
0
应直接返回,避免执行后面的分
页语句。
4.6
【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
4.7
【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。
4.8
【强制】数据订正(特别是删除或修改记录操作)时,要先
select
,避免出现误删除,
确认无误才能执行更新语句。
Java
开发手册
4.9
【强制】对于数据库中表记录的查询和变更,只要涉及多个表,都需要在列名前加表
的别名(或表名)进行限定。
4.10
【推荐】
SQL
语句中表的别名前加
as
,并且以
t1
、
t2
、
t3
、
...
的顺序依次命名。
4.11
【推荐】
in
操作能避免则避免,若实在避免不了,需要仔细评估
in
后边的集合元
素数量,控制在
1000
个之内。
4.12
【参考】因国际化需要,所有的字符存储与表示,均采用
utf8
字符集,那么字符
计数方法需要注意。
o 5、什么是 Buffer Pool
o
1.1 基本概念
1.2 大小
1.3 作用:
1.4 如何判断一个页是否在 BufferPool 中缓存?
o 6
、
InnoDB
如何管理
Page
页
o
6.1 Page 页分类
6.2 通过三种链表结构来维护和管理
6.2.1 free list:表示空闲缓冲区,
6.2.2 flush list:表示需要刷新到磁盘的缓冲区,
6.2.2 lru list:表示正在使用的缓冲区
o 7、为什么写缓冲区,仅适用于非唯一普通索引页?
o
7.1 change Buffer 基本概念
7.2 作用
7.3 change Buffer 的更新流程
7.4 写缓冲区,仅适用于非唯一普通索引页,为什么?
o 8
、
MySQL
为什么改进
LRU
算法?
o
8.1 普通 LRU 算法:
8.2 普通 LRU 算法的优缺点
8.3 改进 LRU 算法
8.4 冷数据区的数据什么时候会被转到热数据区呢?
o 9
、使用索引一定可以提升效率吗?
o
9.1
本质
9.2
索引的优缺点
优点:
缺点:
创建索引的原则:
o 10
、索引有哪几种类型?
o
10.1
普通索引
10.2
唯一索引
10.3
主键索引
10.4
复合索引(组合索引)
10.5
全文索引
o 11、什么是索引下推?
o
11.1 引入前
11.2 引入后
o 12
、什么是自适应哈希索引?
o
12.1 本质
12.2 特性
o 13
、为什么
LIKE
以
"%"
开头索引会失效?
o
13.1
场景:
13.2
解决
%
出现在左边索引失效的方法,使用覆盖索引
13.3 like
失效的原因
o 14、InnoDB 与 MyISAM 的区别
o
14.1 事务和外键
14.2 锁机制
14.3 索引结构
14.4 并发处理能力
14.5 存储文件
14.6 InnoDB 适用场景
14.7 MyISAM 适用场景
o 15
、说一说三个范式?
o 16
、
MySQL
的事务
o
16.1 ACID 事务的特性
16.2 并发事务带来了哪些问题?
16.3 MySQL 的四种隔离级别
o 17
、
MySQL
视图
o
17.1
为什么要使用视图?什么是视图?
17.2
视图有哪些特点?
17.3
视图的使用场景
17.4
视图的优缺点
17.4.1 优点:
17.4.2 缺点:
o 18
、大表数据查询优化思路
1、索引
剩余31页未读,继续阅读
资源评论
心兰相随引导者
- 粉丝: 777
- 资源: 5486
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功