数据库知识点整理


基础知识点


第一部分

  1. 数据库事务特性(ACID特性)
    • 原子性(Atomicity)整个事务中的操作要么完成要么不完成。事务执行过程中出错,则回滚(rollback)到事务开始之前的状态。
    • 一致性 (Correspondence) 事务执行前后数据库的状态都是有效的。
    • 隔离性 (Isolation) 隔离状态执行事务,即在相同时间内执行的两个事务相互隔离,不能访问到其他事务操作中的状态。
    • 持久性 (Durability) 事务操作一旦提交,就永久保存在数据库中。
  2. 数据库索引及其优缺点
    • 什么是数据库索引
      • 索引是一种数据结构,已排好序,方便查询数据库。
      • 主要采用的数据结构包括,Hash Map, 红黑树,B树, B+树
    • 优缺点
      • B+树和Hash Map的区别
        • Hash Map适合等值查询,无法进行范围查询
        • Hash Map没办法利用索引完成排序,不支持多列联合
        • 如果有大量重复key的话,哈希索引效率较低,因为存在哈希碰撞问题。
      • 聚集索引和非聚集索引
        • 聚集索引(数据文件就是索引文件)
          • 叶子节点存的是整行数据,可以直接通过聚集索引的key找到某行
          • 数据的物理存放顺序和索引顺序是一致的,只要索引是相邻的,对应的数据在磁盘上也是相邻的
          • 一个表只能有一个聚集索引(数据存放位置只有一个)
        • 非聚集索引
          • 叶子节点存储的是指针,该指针指向表中相应的数据行。需要回表进行二次查询。
      • 辅助索引
        • 非主键索引,允许重复key,叶子节点存储主键或地址(InnoDB和MyISAM不太一样)
      • 覆盖索引
        • 查询列时,从索引中直接获取查询结果。
      • 联合索引及最左前缀匹配
        • 创建(k1, k2, k3)联合索引,相当于创建了(k1),(k1,k2),(k1, k2, k3)三个索引,最左匹配原则。
  3. 数据库逻辑设计之三大范式(Normal Format)
    参考博文
    数据库设计范式是数据库设计所需要满足的规范。
    • 1NF,字段原子性。字段不可再分割,关系型数据库,默认满足第一范式
    • 2NF,记录唯一性。要求记录具有唯一性,属性完全依赖于主键,不存在部分依赖。
      反例: 表 学号 课程号 姓名 学分 学分依赖课程号,姓名依赖学号,存在部分依赖。
      • 可能存在的问题:
        • 数据冗余
        • 删除异常
        • 插入异常
        • 更新异常
    • 3NF,字段不冗余。任何字段不能由其他字段派生出来,不存在传递依赖。
      反例:表 学号 姓名 年龄 学院名称 学院电话 学院名称和学院电话存在传递依赖
      • 可能存在的问题:
        • 数据冗余
        • 更新异常
    • 反范式化。没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。

MySQL


第一部分

  1. 多用户并发操作可能出现的问题

    • 脏读:A事务读取了B事务执行过程的中间状态
    • 不可重复读:A事务执行过程多次查询的结果不一样(在A事务执行过程中,B事务修改了数据库)
    • 幻读:A事务执行过程中,B事务修改了数据库,导致幻读。区别于不可重复读,前者针对一批数据(例如数据条目),后者针对同一个数据项。
  2. MySQL定义的四种隔离级别
    低级别的隔离一般支持更高的并发处理,并且拥有更低的系统开销。

    • Read UnCommitted:脏读,读到其他事务未提交的数据。
    • Read Committed 不可重复读:大多数数据库系统的默认隔离级别。一个事务提交前不可见。两次读取结果不一致。
    • Repeatable Read 可重复读:MySQL数据库默认的隔离级别。每次读取结果一样(读取的结果不一定是最新事务提交的,但一定是已提交事务),不过,这会导致另外一个棘手问题“幻读”。InnoDB和Falcon存储引擎通过多版本并发控制机制解决了幻读问题。
    • Serializable:它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简而言之,SERIALIZABLE是在每个读的数据行上加锁。在这个级别,可能导致大量的超时Timeout和锁竞争Lock Contention现象,实际应用中很少使用到这个级别,但如果用户的应用为了数据的稳定性,需要强制减少并发的话,也可以选择这种隔离级。
  3. MySQL的搜索引擎

    功能MyISAMMEMORYInnoDBArchive
    存储限制256TBRAM64TBNone
    支持事务NoNoYesNo
    支持全文索引YesNoNoNo
    支持树索引YesYesYesNo
    支持哈希索引NoYesNoNo
    支持数据缓存NoN/AYesNo
    支持外键NoNoYesNo
    • 如果要提供提交、回滚和恢复的事务安全(ACID 兼容)能力,并要求实现并发控制,InnoDB 是一个很好的选择。
    • 如果数据表主要用来插入和查询记录,则 MyISAM 引擎提供较高的处理效率
    • 如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存的 MEMORY 引擎中,MySQL 中使用该引擎作为临时表,存放查询的中间结果
    • 如果只有 INSERT 和 SELECT 操作,可以选择Archive 引擎,Archive 存储引擎支持高并发的插入操作,但是本身并不是事务安全的。Archive 存储引擎非常适合存储归档数据,如记录日志信息可以使用 Archive 引擎
  4. 索引下推(index condition pushdown ,ICP)
    参考博文 对查询条件包含like的较为适用,无法通过最左匹配原则将查询条件一一等值匹配,则其他条件就需要服务器或搜索引擎来判断。

    • 即索引条件下沉到搜索引擎。
    • 不使用ICP,存储引擎通过索引检索到数据,再返回MySQL服务器,服务器判断是否满足条件
    • 使用ICP,如果存在索引的列为判断条件之一时,服务器将判断条件传递给存储引擎,通过存储引擎判断索引是否符合MySQL服务器传递条件,符合时才传递
    • 索引条件下推优化可以减少存储引擎查询基础表的次数,也可以减少MySQL服务器从存储引擎接收数据的次数,IO操作上的优化。
  5. 查询优化器

    • explain查看sql语句执行计划,看有没有走索引查询,分析情况
    • MySQL的查询优化器,优化过程如下:
      • 根据搜索条件,找出所有可能使用的索引
      • 计算全表扫描的代价
      • 计算使用不同索引执行查询的代价
      • 对比各种执行方案的代价,找出成本最低的一个

Redis


session cookie cache token区别


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值