自学内容网 自学内容网

数据库常见问题(持续更新)

数据库常见问题(持续更新)

1、数据库范式?

  • 1NF:不可分割
  • 2NF:没有非主属性对候选码存在部分依赖
  • 3NF:没有非主属性传递依赖候选码
  • BCNF:消除了主属性对对候选码的传递依赖或部分依赖

2、InnoDB事务的实现?

InnoDB 为Mysql数据库的默认引擎,InnoDB通过buffer poollog bufferredo logundo log来实现事务
以一个update语句为例:

  1. InnoDB在收到一个update语句后,会先根据条件找到数据所在页,并将该页缓存在Buffer Pool中;
  2. 执行update语句,修改Buffer Pool中的数据,也就是内存中的数据;
  3. 针对update语句生成一个redo log对象,并存入log buffer中;
  4. 针对update语句生成undo log日志,用于实现事务回滚;
  5. 如果事务提交,那么会把redo log对象进行持久化,会后将buffer pool中所修改的数据页持久化到磁盘中;
  6. 如果事务回滚,利用undo log进行回滚;

3、分页操作如何实现?

MySQL中使用limit关键字,举例:

select * from table_name where 条件 limit 当前页码*页面容量-1,页面容量

limit 初始位置,记录数

where 字段名 like 表达式

  • %:0或多个任意字符
  • _:任意单个字符
  • []:其中的任意一个值

4、B树和B+树?

B树的特点:

  1. 节点排序
  2. 一个节点可以存多个元素,这多个元素也是排好序的

B+树的特点:

  1. 拥有B树的所有特点
  2. 叶子之间存在指针
  3. 非叶子节点上的元素在叶子节点上冗余,且叶子节点排好序的

问题:InnoDB存储引擎采用B+树为索引的原因?

  • 相比于红黑树来说,B+树层级更少,搜索效率更高。
  • 相比于B树来说,B树无论是叶子结点还是非叶子结点都会保存数据,这样会导致一页存储的键值减少,存储大量数据时只能增加树的高度,导致性能降低。

原文地址:https://blog.csdn.net/rookie636/article/details/140280030

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!