数据库常见问题(持续更新)
数据库常见问题(持续更新)
1、数据库范式?
- 1NF:不可分割
- 2NF:没有非主属性对候选码存在部分依赖
- 3NF:没有非主属性传递依赖候选码
- BCNF:消除了主属性对对候选码的传递依赖或部分依赖
2、InnoDB事务的实现?
InnoDB 为Mysql数据库的默认引擎,InnoDB通过buffer pool,log buffer, redo log, undo log来实现事务
以一个update语句为例:
- InnoDB在收到一个update语句后,会先根据条件找到数据所在页,并将该页缓存在Buffer Pool中;
- 执行update语句,修改Buffer Pool中的数据,也就是内存中的数据;
- 针对update语句生成一个redo log对象,并存入log buffer中;
- 针对update语句生成undo log日志,用于实现事务回滚;
- 如果事务提交,那么会把redo log对象进行持久化,会后将buffer pool中所修改的数据页持久化到磁盘中;
- 如果事务回滚,利用undo log进行回滚;
3、分页操作如何实现?
MySQL中使用limit关键字,举例:
select * from table_name where 条件 limit 当前页码*页面容量-1,页面容量
limit 初始位置,记录数
where 字段名 like 表达式
- %:0或多个任意字符
- _:任意单个字符
- []:其中的任意一个值
4、B树和B+树?
B树的特点:
- 节点排序
- 一个节点可以存多个元素,这多个元素也是排好序的
B+树的特点:
- 拥有B树的所有特点
- 叶子之间存在指针
- 非叶子节点上的元素在叶子节点上冗余,且叶子节点排好序的
问题:InnoDB存储引擎采用B+树为索引的原因?
- 相比于红黑树来说,B+树层级更少,搜索效率更高。
- 相比于B树来说,B树无论是叶子结点还是非叶子结点都会保存数据,这样会导致一页存储的键值减少,存储大量数据时只能增加树的高度,导致性能降低。
原文地址:https://blog.csdn.net/rookie636/article/details/140280030
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!