数据库面试中,哪些30道高频问题最常被问到?
摘要:一、MySQL问答 1、数据库sql语句查询,跨表查询有哪几种方式 内连接(inner可以不写) select e.name e.age p.product_name p.saled from employee e,product p wh
目录一、MySQL问答1、数据库sql语句查询,跨表查询有哪几种方式2、数据库的索引用到的是什么数据结构?3、mylsam、innodb的区别4、MySQL的Gtid复制原理是什么?5、同步、半同步、异步复制原理是什么?6、说说你了解的MySQL慢查询?7、说说MySQL的执行计划8、说说MySQL支持的数据类型9. 了解数据库如何备份吗10. Oracle和Mysql的区别11. 事务的四种特性12. 四种隔离级别以及什么是脏读,幻读,不可重复读13. MySQL中 主键索引、普通索引、唯一索引的区别14. 数据库三大范式15. sql语句各种条件的执行顺序,如select, where, order by, group by16. 求表的size,或做数据统计可用什么存储引擎17. 读多写少可用什么引擎18. 假如要统计多个表应该用什么引擎19.MySQL Explain各字段意思20.索引设计的原则?21. MySQL有关权限的表有哪几个?二、白日梦的MySQL专题三、Redis问答1. redis能存哪些类型2、redis为什么这么快? 高并发如何处理的?3.过期键的删除策略4.Redis的内存淘汰策略有哪些5. RedLock6. Redis缓存异常--缓存雪崩7. Redis缓存异常--缓存穿透8. Redis缓存异常--缓存击穿9. 缓存预热10.如何保证数据库和缓存双写一致性11.假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来?四、白日梦的Redis笔记。
一、MySQL问答
1、数据库sql语句查询,跨表查询有哪几种方式
内连接(inner可以不写)
select e.name e.age p.product_name p.saled
from employee e,product p
where e.id = p.id
select e.name e.age p.product_name p.saled
from employee inner
join e,product p on e.id = p.id
这就是内连接,它要求数据必须On条件必须百分百匹配才会符合条件并返回。当不满足时,他会返回空。
外连接是用左\右侧的数据去关联另一侧的数据,即使关联不上任何数据也得把左\右侧的数据返回回来。
外连接分(左外连接)和(右外连接)
左外连接( left join)
select g2.Name,Price,ProductionDate,Amount,g1.name
FROM Goods G1
left join GoodsType G2 on G1.Typeld=G2.IO
右外连接(right join--空值的会显示出来)
select g2.Name,Price,ProductionDate,Amount,g1.name
FROM Goods G1 right join GoodsType G2 on G1.Typeld=G2.IO
全外连接(full outer(可以不写) join--空值的会显示出来)
select g1.name,g2.Name,price,productiondate,g2.Amount
FROM GoodsType g1 full outer join Goods g2 on g1.IO=g2.Typeld
交叉连接(笛卡尔积)查询所有的值
select g1.name,g2.Name,price,productiondate,g2.Amount
FROM GoodsType g1 cross join Goods g2 where g1.IO=g2.Typeld
2、数据库的索引用到的是什么数据结构?
答:B+树
问:那么B+树的特点是什么?为什么要用这个数据结构?
B+树是B树的变种,他们可以是 23树,234树,2345树等等,当单个节点允许伸出1200节点时,三层就可以有17亿,因此它体型扁平。。。有利益磁盘IO
B+树非叶子结点不存储数据,B树存储数据,所以相同大小数据块,能存更多B+索引
B+树叶子结点上有双向链表串联,有利于进行范围搜索
B+树为什么有利于磁盘IO?
首先了解一下计算机的空间局部性原理:当一个数据被用到时,其附近的数据也通常会马上被使用。即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。
使用红黑树(平衡二叉树)结构的话,每次磁盘预读中的很多数据是用不上的数据。因此,它没能利用好磁盘预读的提供的数据。然后又由于深度大(较B树而言),所以进行的磁盘IO操作更多。
