【第五章:MySQL数据库】第21节:MySQL - 必知必会(上)
大家好,很高兴我们可以继续学习交流Java高频面试题。第五章主要是对MySQL数据库进行浅析,我们主要针对面试中常见的MySQL知识点进行交流分析。在对高频面试题分析的过程中,加入实际工作中经常需要使用到的MySQL优化等知识,希望大家可以有效的理解与掌握。
面试中针对MySQL数据库的考察主要集中在以下的知识点:
- MySQL索引
- 常用存储引擎
- MySQL日志模块
- 事务与隔离级别
- MySQL的锁机制
- SQL优化,线上故障排查
在本小节中,我们主要介绍MySQL数据库索引以及存储引擎相关知识点。让我们一起来学习MySQL数据库相关知识点吧~
(1)MySQL的索引有了解吗?(重点掌握)
答:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息,就像一本书的目录一样,可以加快查询速度。InnoDB 存储引擎的索引模型底层实现数据结构为B+树,所有数据都是存储在 B+ 树中的。
解析:
MySQL的索引是面试必考的一个知识点,希望大家可以理解掌握。不同的存储引擎中存在不同的索引结构,本小节中,我们以最常见的InnoDB为例来阐述。在面试中,还可以接着考察下边的索引知识点。
面试官:“为什么底层数据结构使用B+树,而不是B树?”
- B+树是B树的变种,B+树的非叶子节点只用来保存索引,不存储数据,所有的数据都保存在叶子节点;而B树的非叶子节点也会保存数据。这样就使得B+树的查询效率更加稳定,均为从根节点到叶子节点的路径。
- B+树的内部结点并没有指向关键字具体信息的指针,因此其内部结点相对B 树更小,同样空间可以读入更多的节点,所以B+树的磁盘读写代价更低。
面试官:“聚簇索引和非聚簇索引有了解吗?”
聚簇索引也称为主键索引,其索引树的叶子节点中存的是整行数据,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。因为索引(目录)只能按照一种方法进行排序。
非聚簇索引(普通索引)的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。
案例解析:
为了让大家更好的理解主键索引和普通索引的区别,我们给出一个具体的案例如下:
我们先来创建一张表User,主键为id,并且拥有字段uid和字段name,uid字段上有索引,建表语句如下所示:
create table User( id int primary key, uid int not null, name varchar(16), index (uid))engine=InnoDB;
接着我们插入如下几条数据:
insert into User values(1,21,'zhangsan'),(2,22,lisi),(3,23,'wangwu'),(5,25,'ywq'),(6,26,'dym');
我们知道,主键上自动创建了主键索引,并且我们手动在uid字段上创建的普通索引。接下来,我们一起看下主键索引树和普通索引树的形状吧~
由上图可以看出,左边主键索引树的叶子节点存储的是完整的记录,而普通索引树上存储的是其对应的主键的值。那么主键索引和普通索引在查询方面的差距也就显而易见了吧~
MySQL回表:
- 如果语句是 select * from User where id=3,即主键查询方式,则只需要搜索 主键索引树。
- 如果语句是 select * from User where uid=23,即普通索引查询方式,则需要先搜索 普通索引树,得到其对应的主键值为 3,再到主键索引树搜索一次。这个过程称为回表。
覆盖索引:
如果在普通索引树上的查询已经直接提供了结果,不需要回表操作,这样的普通索引叫做覆盖索引。覆盖索引的使用可以显著提高查询效率,是常见的MySQL性能优化手段。
索引的最左前缀原则:
在联合索引的情况下,不需要索引的全部定义,只要满足最左前缀,就可以利
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
<p> Java开发岗高频面试题全解析,专刊正文共计31节,已经全部更新完毕。专刊分9个模块来对Java岗位面试中的知识点进行解析,包括通用面试技能,Java基础,Java进阶,网络协议,常见框架以及算法,设计模式等。专刊串点成面的解析每个面试题背后的技术原理,由浅入深,循序渐进,力争让大家掌握面试题目的背后的技术原理,摒弃背题模式的陋习。 专刊详细信息,请查阅专刊大纲和开篇词的介绍。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p>