数据库面试相关知识

答案主要是简略回答,可以根据情况适当扩展。

一.索引

1.数据结构

有Hash索引和Btree索引,Hash索引主要是hash表的数据结构,适用于单条记录查询,其余场景适合Btree索引。
mysql使用B+树索引。
B树和B+树区别:B+树值都存在叶节点,B树值都存在中间节点,B+树IO次数会比较少,B+树叶节点是链起来的,可以顺序查找。
例举一个顺序查找的场景:有序输出所有情况即可使用叶节点顺序遍历的结果。

2.myisam与innodb实现

myisam是非聚簇索引,b+树叶节点存的是地址。
innodb是聚簇索引,直接是存的值。分为主索引和辅助索引,主索引一遍查找即可找到值,辅助索引需要找到主键再遍历一遍主索引。
主索引即覆盖索引,即一次找到数据,不需要再走一遍主索引。

3.聚簇索引、非聚簇索引、覆盖索引

见2

4.索引分类(普通索引、唯一索引、主键索引)

5.最左匹配原则

假设索引(a, b)
a and b 可以用索引
b and a 可以用索引(即使顺序是反过来的,只要能找到最左的a即可)
b 不可用索引

6.索引优缺点

优点:
1.唯一索引保证数据库每一行数据唯一性;
2.加快数据检索速度;
3.随机IO变为顺序IO;
缺点:
1.索引需要维护;
2.索引占用物理空间。

二.事务

1.ACID(原子性,一致性,隔离性,持久性)

2.并发操作的问题(脏读,不可重复读,幻读)

脏读是指读了其他事务未提交的数据;
不可重复读是指同一事务两次读数据结果不同;
幻读是指一事务再两次读过程中发现第二次数据多了,因为其他事务写了数据。

3.隔离级别(读未提交,读已提交,可重复读,串行化)

读未提交会造成脏读,不可重复度,幻读;
读已提交解决脏读;
可重复度解决不可重复读,脏读的问题;
串行化解决所有问题,效率最低。

4.可重复读实现原理MVCC

MVCC基本可以解决所有问题,但可能出现幻读。

三.锁

乐观锁:先不加锁,操作之后判断数据是否一致,不一致回滚。
悲观锁:直接加锁,其他事务需要得到锁才能操作数据。
死锁:A,B同时需要1,2资源,A持有1,B持有2,二者一直处于等待状态,且不释放自己的资源。

四.存储引擎

myisam和innodb。
1.count运算:myisam有meta-data,count(*)运算不需要消耗很多资源,innodb没有这种缓存。
2.事务和崩溃后的安全恢复:myisam查询速度更快,但是不支持事务和崩溃修复,innodb支持事务以及崩溃修复能力。
3.myisam不支持外键,innodb支持。
现在mysql默认innodb

五.MYSQL数据结构

1.INT范围(-2^16 —— 2^16)

2.int(11)含义(小于11位补0显示)

3.char和varchar区别(varchar可以自动缩小所占空间,空间换时间)

六.内连接、左连接、右连接

内连接:两表公共部分
左连接:以左表为基准,右表没有则为空
右连接:同理。

七.数据库范式

八.sql

1.查询所有学科都及格的学生

select name from stu group by name having min(score)>=80;

2.查询第二高薪水

select max(salary) from employee where salary < (select max(salary) from employee);

3.查询所有功课平均分超过60的同学们和他的平均分

select name, avg(score) as avg_score from student group by name having avg(score) >= 60 order by avg_score desc;

posted @ 2020-03-23 11:40  isshpan  阅读(184)  评论(2)    收藏  举报