2017.02.27:关系型数据库

1. 时间复杂度用来检验某个算法处理一定量的数据要花多长时间。为了描述这个复杂度,计算机科学家使用数学上的『简明解释算法中的大O符号』。这个表示法用一个函数来描述算法处理给定的数据需要多少次运算。重要的不是数据量,而是当数据量增加时运算如何增加。时间复杂度不会给出确切的运算次数,但是给出的是一种理念。


2.数据库的sort()函数——合并排序:与很多有用的算法类似,合并排序基于这样一个技巧:将 2 个大小为 N/2 的已排序序列合并为一个 N 元素已排序序列仅需要 N 次操作。这个方法叫做合并。

1) 在两个序列中,比较当前元素(当前=头一次出现的第一个)

2) 然后取出最小的元素放进8元素序列中

3) 找到(两个)序列的下一个元素,(比较后)取出最小的

重复1、2、3步骤,直到其中一个序列中的最后一个元素,然后取出另一个序列剩余的元素放入8元素序列中。这个方法之所以有效,是因为两个4元素序列都已经排好序,你不需要再『回到』序列中查找比较。

3. 二维阵列是最简单的数据结构。一个表可以看作是个阵列。

3.1二叉查找树是带有特殊属性的二叉树,每个节点的关键字必须:比保存在左子树的任何键值都要大,比保存在右子树的任何键值都要小。

3.2在一个B+树里:只有最底层的节点(叶子节点)才保存信息(相关表的行位置),其它节点只是在搜索中用来指引到正确节点的。

3.3哈希表这种数据结构可以用关键字来快速找到一个元素。为了构建一个哈希表,你需要定义元素的关键字:关键字的哈希函数。关键字计算出来的哈希值给出了元素的位置(叫做哈希桶);关键字比较函数。一旦你找到正确的哈希桶,你必须用比较函数在桶内找到你要的元素。

3.4哈希联接的道理是:

1) 读取内关系的所有元素

2) 在内存里建一个哈希表

3) 逐条读取外关系的所有元素

4) (用哈希表的哈希函数)计算每个元素的哈希值,来查找内关系里相关的哈希桶内

5) 是否与外关系的元素匹配。

4.查询管理器


这部分是数据库的威力所在,在这部分里,一个写得糟糕的查询可以转换成一个快速执行的代码,代码执行的结果被送到客户端管理器。这个多步骤操作过程如下:

1)查询首先被解析并判断是否合法

2)然后被重写,去除了无用的操作并且加入预优化部分

3)接着被优化以便提升性能,并被转换为可执行代码和数据访问计划。

4)然后计划被编译

5)最后,被执行

5. 一个ACID事务是一个工作单元,它要保证4个属性:

原子性(Atomicity): 事务『要么全部完成,要么全部取消』,即使它持续运行10个小时。如果事务崩溃,状态回到事务之前(事务回滚)。

隔离性(Isolation): 如果2个事务 A 和 B 同时运行,事务 A 和 B 最终的结果是相同的,不管 A 是结束于 B 之前/之后/运行期间。

持久性(Durability): 一旦事务提交(也就是成功执行),不管发生什么(崩溃或者出错),数据要保存在数据库中。

一致性(Consistency): 只有合法的数据(依照关系约束和函数约束)能写入数据库,一致性与原子性和隔离性有关。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值