数据库考点_1

在这里插入图片描述
关系型数据库和非关系型数据库的区别

简单来说:
1.关系型数据库通过 外键关联 来建立表与表之间的关系
2.非关系型数据库通常指 数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定

   比如 有一个学生的数据:

         姓名:张三,性别:男,学号:12345,班级:二年级一班

  还有一个班级的数据:

        班级:二年级一班,班主任:李四

关系型数据库中,我们创建学生表和班级表来存这两条数据,并且学生表中的班级存储的是班级表中的主键。

非关系型数据库中,我们创建两个对象,一个是学生对象,一个是班级对象

如何设计一个关系型数据库

一个合格的RDBMS(Relational Database Management System, 关系型数据库管理系统)应该包含下面几个内容:

  • 要有一个存储模块负责存储我们的数据(类似于文件系统,将数据持久化地存入到磁盘中).

  • 除了有存储模块一块,我们还需要组织和使用这些数据,需要一个程序实例,用逻辑结构映射出物理结构,并且在程序中提供获取以及管理数据的方式以及必要的问题追踪机制. 这主要包括:

    • 存储管理模块:我们需要对数据的格式以及文件的分隔进行统一的管理, 即把物理数据通过逻辑的形式给组织和表示出来
    • 缓存机制:把取出来的数据块(因为一行一行从磁盘读太慢了,多读一点放内存里,这样可以提高数据库效率) 存放在缓存里,下次需要的时候,直接从内存里返回,而不用发生io行为.
    • SQL解析模块:将SQL编译解析转换为机器可执行的指令.
    • 日志管理模块:对我们的操作做记录,方便我们做数据库的灾难恢复等.
    • 权限划分模块:给用户提供一定的私密空间,根据不同的权限,只能看到不同的数据.
    • 异常容灾机制模块:但我们数据库出现异常,应该怎么恢复这些问题.
    • 索引模块:优化数据查询效率.
    • 锁模块:使得数据库支持并发操作.

总结如下
在这里插入图片描述
为什么要使用索引

索引是对某个字段进行排序的一种方式。对数据库表中一个或多个列(例如,employee 表的姓氏 (lname) 列)的值进行排序的结构。简单粗暴的说,你可以认为索引就是一棵B+Tree

如果我们使用全表扫描的方式,将整张表的数据都一起加载到内存中,然后一块一块(数据库的存储及加载单位是数据块或者数据页)得扫描数据,当数据量小的时候很快,但是当数据量非常大的时候,会极其缓慢,内存压力也贼大.

索引就是为了解决全表扫描在数据量很大的情况下效率很低而产生的,其 灵感来自于字典,可以根据偏旁部首这些去很快地查到我们想要的字词所在的页面进而查找到我们想要的字词,而 这些关键信息以及根据关键字查找数据的方式便组成了我们的索引

所以,使用索引的原因: 通过索引,可以较少全表扫描的次数,大幅度地提升查询数据的速度.

什么样的信息可以成为索引

肯定是那种可以把数据限定在某一范围的字段啦哈哈哈哈

主键 当然首当其冲,肯定可以,唯一键以及普通键也可以,能起到那种作用都可以.

索引的数据结构

  • 最简单的: 生成索引,建立二叉搜索树(左边都比根节点小,右边都比根节点大,且没有重复的节点,查找的时间复杂度可以O(logN))进行二分查找.
  • 复杂点的: 生成索引,通过它的变种–>平衡二叉树(AVL树)–>红黑树(自平衡的二叉搜索树)–>B-Tree(平衡多路查找树)结构进行查找.
  • 再牛逼一点的: 生成索引,建立B+Tree(B树的变形)结构进行查找,mysql索引是通过B+Tree实现的.
  • 还有一种,生成索引,建立Hash结构进行查找.

关于每种结构的优缺点,我们下一篇博客再说

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值