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

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

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树无论是叶子结点还是非叶子结点都会保存数据,这样会导致一页存储的键值减少,存储大量数据时只能增加树的高度,导致性能降低。

相关推荐

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

    2024-07-12 05:22:01       26 阅读
  2. Redis的应用场景以及常见问题持续更新

    2024-07-12 05:22:01       34 阅读
  3. HTTP常见状态码(持续更新中~~)

    2024-07-12 05:22:01       45 阅读
  4. 【ADB】常见命令汇总(持续更新

    2024-07-12 05:22:01       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 05:22:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 05:22:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 05:22:01       58 阅读
  4. Python语言-面向对象

    2024-07-12 05:22:01       69 阅读

热门阅读

  1. DevSecOps在数字政府建设中的实践研究

    2024-07-12 05:22:01       25 阅读
  2. Flask 不同版本项目的终端命令运行方式

    2024-07-12 05:22:01       22 阅读
  3. 使用GPT-4和ChatGPT构建应用项目

    2024-07-12 05:22:01       23 阅读
  4. 65、Flink 的 DataStream Connectors 概述

    2024-07-12 05:22:01       25 阅读
  5. stm32使用pwm和编码器模式(包含重映射)

    2024-07-12 05:22:01       26 阅读