Java面试全攻略--数据库.md

Posted by lizhao on 07-09,2019

Java面试全攻略--数据库

存储引擎

InnoDB

使用B+树实现,叶子节点包含一个主键和所有的数据。 支持事务,支持外键

MyIASM

B+树实现,叶子节点包含一个主键和数据地址。 不支持事务。 读取比较快。 插入和更新比较慢,因为都是表级锁。

比较MyIASM和InnoDB

  1. 非事务安全型,安全型
  2. 表级锁,行级锁和页级锁
  3. 相对简单
  4. 支持全文检索,不支持

B-树/B+树

二叉搜索树

左边的节点都小于中间节点。 右边的字节都大于中间节点。 有可能不平衡,io操作比较多。

B-树

多路搜索树。 所有子节点在同一级。 一个节点可以包含多个值。 子节点数量是父节点里面值的数量 +1。 大小比较就发生在内存里面。 数据有可能在中间节点。

B+树

B-树的变形。 所有数据都在叶子节点。 中间节点只作为查找方向,所以都是同样的IO次数,比较稳定。 子节点数量 == 父节点关键字的数量。

sql语句优化

  1. 防止全表查询,比如在where语句里面使用,or/in/not in/ %%/=null/
  2. 避免select *
  3. 避免临时表
  4. 数字字段优于字符串
  5. 尽量建立索引

几种join

left join,right join,inner join,full join,cross join

三范式

  1. 列不可再分
  2. 一个表做一件事情
  3. 字段尽量不要冗余

事务ACID

原子性/一致性/隔离/持久

分库分表

课堂id,时间。

数据库锁

排他锁(X)/共享锁(S)

  1. X,此时不能读取,不能写。
  2. S,可以读,不能写