面试相关总结(MySql)
面试相关总结(MySql)
1、 查询语法与执行顺序
1.1 查询语法顺序
- Select
- From
- Left JOIN
- ON
- Where
- Group by
- Having
- Order by
- Limit
1.2 面试遇到的一些sql
stu(Sno,Sname,Sex,Age,Native) 分别表示:学号、姓名、性别、年龄、籍贯
teacher(Tno,Tname,Post,Sex,Age) 分别表示:编号、姓名、职称、性别、年龄
course(Cno,Cname, Tno,Period) 分别表示:课号、课程名、教师编号、时段
grade(Sno,Cno,Grade) 分别表示:学号、课号、分数
1) 查询班级里选课数量大于3且至少有一门课的成绩大于80分的人数。
Select count(a.SNo)
From stu a, grade b
Where
a.Sno = b.Sno
and
max(b.Grade > 80)
Group by b.Sno
Having count(b.Sno) > 3
2)在3月20号这一天的订单业务中,提交订单时间和结算订单时间低于1分钟的订单。
Select product.*
From product
Where
data(add_time) == '2021-03-20'
and
TimeStampDiff(SECOND, create_time, end_time)
ps: 关于这方面时间的函数还是不太熟,具体函数使用查看这边
2、索引相关(Innodb)
2.1 基本概念
索引的所用与目录相似,旨在帮助快速查询到结果。
大致可分为聚集索引,非聚集索引,联合索引,哈希索引,全文索引。
2.2 索引实现原理
2.1 聚集索引和非聚集索引
非聚集索引的实现结构是B树,非聚集索引的实现结构是B+树,两个结构的区别是B+树仅叶子节点保存数据,B树叶子节点与非叶子节点均保存数据。
B+Tree对比BTree的优点:
1、磁盘读写代价更低
一般来说B+Tree比BTree更适合实现外存的索引结构,因为存储引擎的设计专家巧妙的利用了外存(磁盘)的存储结构,即磁盘的最小存储单位是扇区(sector),而操作系统的块(block)通常是整数倍的sector,操作系统以页(page)为单位管理内存,一页(page)通常默认为4K,数据库的页通常设置为操作系统页的整数倍,因此索引结构的节点被设计为一个页的大小,然后利用外存的“预读取”原则,每次读取的时候,把整个节点的数据读取到内存中,然后在内存中查找,已知内存的读取速度是外存读取I/O速度的几百倍,那么提升查找速度的关键就在于尽可能少的磁盘I/O,那么可以知道,每个节点中的key个数越多,那么树的高度越小,需要I/O的次数越少,因此一般来说B+Tree比BTree更快,因为B+Tree的非叶节点中不存储data,就可以存储更多的key。
2、查询速度更稳定
由于B+Tree非叶子节点不存储数据(data),因此所有的数据都要查询至叶子节点,而叶子节点的高度都是相同的,因此所有数据的查询速度都是一样的。
特别推荐这一篇博客。