mysql索引结构
-
BTree索引
-
Hash索引
-
full-text全文索引
-
R-Tree
那些情况建索引
-
主键自动建立唯一索引
-
频繁作为查询条件的字段应该创建索引
-
查询中与其他表相关联的字段,外键关系建立索引
-
频繁更新的字段不适合创建索引,因为每次更新不单单更新了记录还更新了索引
-
where条件里用不到的字段不要创建索引
-
单键/组合索引的选择问题 who?(高并发下建议组合索引)
-
查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
-
查询中统计或分组字段
哪些情况不要建索引
-
表记录少
-
经常操作dml语句的表
-
数据重复且平均分布的表字段,因此只为最经常查询和最经常排序的数据列建立索引,注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果
性能分析
explian重点
能干什么
-
表的读取顺序
-
数据读取操作的操作类型
-
哪些索引可以被使用
-
哪些索引被实际使用
-
表之间的引用
-
每张表有多少行被优化器查询
id三种情况
-
id 相同,执行顺序由上至下
-
id不同,如果是子查询,id序号递增,id越大优先级越高
-
id相同不同 ,同时存在
select_type
-
SIMPLE 简单查询
-
PRIMARY 主查询 (最外层的查询)
-
SUBQUERY 子查询
-
DERIUED 某个查询的子查询的临时表
-
UNION 联合查询
-
UNION RESULT 联合查询结果
type::
type显示的是访问类型排列,是较为重要的一个指标
从最好到最差依次是:
system > const > eq_ref> ref > range > index > ALL;
一般来说,得保证查询至少达到range级别,最好ref
----------------------------------------------type类型-------------------------------------------------------
-
system:表只有一行记录(等于系统表) 这是const类型的特列 一般不会出现,可忽略不计
-
const:表示通过索引一次就查询到了,const用来比较primary key或者unique索引。因为只匹配一行数据,所以很快,如将主键置于where列表中,Mysql就能将该查询转换为一个常量
-
eq_ref:唯一性索引扫描,表中只有一条记录与之匹配,常用于主键或唯一索引扫描(两个表是多对一或者一对一的关系,被连接的表是一的情况下,他的查询是eq_ref)
-
ref:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回匹配某个单独值的所有行,然而他可能会找到多个复合条件的行,属于查找和扫描的结合体
-
range:只检索给定范围的行,使用一个索引来选择行,key列显示使用了哪个索引,一般where语句里出现了betweent,<,>,in等的查询,这种范围扫描索引比全表扫描好
-
index:index与ALL的区别,index只遍历索引树,索引文件通常比数据文件小
-
ALL:全表扫描
----------------------------------------------type类型-------------------------------------------------------
possible_keys:显示可能应用的的索引(理论上)
key:实际使用的索引,查询中若使用了覆盖索引,则该索引仅仅出现在key中
**key_len:**表示索引中使用的字节数,在不损失精度的情况下越短越好,kenlen显示的值为索引字段的最大可能长度,并非实际使用长度,kenlen是根据表定义计算而得,而不是通过表内检索出的
最后
毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节
美团面试经验
字节面试经验
菜鸟面试经验
蚂蚁金服面试经验
唯品会面试经验
因篇幅有限,图文无法详细发出
美团面试经验
[外链图片转存中…(img-hLcoJ70W-1714142891141)]
字节面试经验
[外链图片转存中…(img-nIbLTVL0-1714142891141)]
菜鸟面试经验
[外链图片转存中…(img-idCqfuCc-1714142891142)]
蚂蚁金服面试经验
[外链图片转存中…(img-eK7EFfpl-1714142891142)]
唯品会面试经验
[外链图片转存中…(img-rQECVv3d-1714142891142)]
因篇幅有限,图文无法详细发出