zoukankan      html  css  js  c++  java
  • 数据库复习

    索引

     索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。

    https://www.cnblogs.com/l199616j/p/11232392.html

    索引的底层实现

    什么时候需要索引

    1. 主键自动建立唯一索引
    2. 频繁作为查询条件的字段应该创建索引
    3. 查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找
    4. 查询中统计或者分组的字段;

    B+树和B树怎么实现

    https://www.cnblogs.com/nullzx/p/8729425.html

    B+树与B树的区别

    B+树相对于B树有一些自己的优势,可以归结为下面几点。

    • 单一节点存储的元素更多,使得查询的IO次数更少,所以也就使得它更适合做为数据库MySQL的底层数据结构了。
    • 所有的查询都要查找到叶子节点,查询性能是稳定的,而B树,每个节点都可以查找到数据,所以不稳定。
    • 所有的叶子节点形成了一个有序链表,更加便于查找。

    为什么索引要用B+不用其他

    是B-Tree的改进版本,同时也是数据库索引所采用的存储结构。数据都在叶子节点上,并且增加了顺序访问指针,每个叶子节点都指向相邻的叶子节点的地址。相比B-Tree来说,进行范围查找时只需要查找两个节点,进行遍历即可。而B-Tree需要获取所有节点,相比之下B+Tree效率更高。

    B-tree:因为B树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出),指针少的情况下要保存大量数据,只能增加树的高度,导致IO操作变多,查询性能变低;

    Hash:虽然可以快速定位,但是没有顺序,IO复杂度高。

    二叉树:树的高度不均匀,不能自平衡,查找效率跟数据有关(树的高度),并且IO代价高。

    红黑树:树的高度随着数据量增加而增加,IO代价高。

    事务

    事务是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。事务是DBMS中最基础的单位,事务不可分割

    Atomicity:原子性

    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生

    A向B转200元

    转钱这个操作,要么都成功,要么都失败

    Consistency:一致性

    事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态

    Isolation:隔离性

    事务的隔离性是指当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,即多个事务之间要互相隔离。

    隔离级别:

    Durablilty:持久性

    事务的持久性是指一个事务一旦被提交,这个事务对数据库里的数据的改变将是永久的,接下来即使数据库发生故障也不应该对其有任何影响

    范式

    第一范式

    所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系

    符合1NF的关系中的每个属性都不可再分

    在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

    第二范式

     第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。
    第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是属性完全依赖于主键。

    若关系模式R∈1NF(即R符合第一范式),并且每一个非主属性都完全依赖于R的码,则R∈2NF(即R符合第二范式)。

    这里表的码为(学号,课程), 即知道这两项可以确定系名、宿舍、分数,或者是这三项依赖于前两项,可知:

    分数完全依赖(学号,课程)系名部分依赖(学号,课程),即知道学号或者课程就能确定系名.宿舍楼部分依赖(学号,课程),即知道学号或者课程就能确定宿舍楼.

    需要改为:

    第三范式

    满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。 也就是说, 如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。

    若关系模式R∈3NF(即R符合第三范式),则每一个非主属性既不部分依赖于码也不传递依赖于码。

    不符合第三范式,这是因为你知道了系名,同样也就知道了宿舍楼,称宿舍楼传递依赖于码(学号),可分解为

    Mysql引擎

    InnoDB

    是一个事务型的存储引擎,有行级锁定和外键约束

    提供了对数据库ACID事务的支持,实现了SQL标准的四种隔离级别

    适用于经常更新的表,适合处理多重并发的更新请求,可以从灾难中恢复(bin-log日志)

    Mylsam

    不支持事务,可以在service层进行根据自己的业务需求进行相应的控制

    不支持外键的表设计

    查询速度很快,强调快速读取

    SQL语句

    性能优化

    https://juejin.im/post/5e0f5eec5188253a9d4a436f

    联结

  • 相关阅读:
    resin实现热部署配置
    tomcat实现域名访问步骤
    springboot学习笔记2---配置拦截器:
    springboot学习笔记2:搭建web项目
    springboot学习笔记1:springboot入门
    重识maven
    shiro学习笔记:remeberMe,多次登录锁死账号
    shiro学习笔记:授权管理
    springmvc定时任务及RequestBody注解
    springmvc处理异常
  • 原文地址:https://www.cnblogs.com/smallocean/p/12664852.html
Copyright © 2011-2022 走看看