数据库原理读书笔记一

从时间复杂度说起

对于一些普通运算时间复杂度显得不是那么重要
但是对于应对大量的数据 或者要争取毫秒级操作
那么理解这个概念就很关键了

举例:
假设要处理2000条数据

  • O(1) 算法会消耗一次运算

  • O(log(n)) 算法会消耗7次运算

  • O(n*log(n)) 算法会消耗 14,000 次运算

  • O(n^2) 算法会消耗 4,000,000 次运算

  • hash表的时间复杂度O(1)

  • 平衡二叉树的时间复杂度为O(log(n))

  • 搜索一个阵列的会得到O(n)

  • 最好的排序算法具有 O(n*log(n)) 复杂度

  • 糟糕的排序算法具有 O(n^2) 复杂度

归并排序

归并排序的核心思想是分而治之
先分后治
差分需要的次数为log(n)
但是合并对比的次数每次都是8

  • 第一步,4 次合并,每次成本是 2 次运算。
  • 第二步,2 次合并,每次成本是 4 次运算。
  • 第三步,1 次合并,成本是 8 次运算。

所以归并排序的时间复杂度为nlog(n)

二维队列

图片地址
http://ww2.sinaimg.cn/large/7cc829d3jw1f3drdpqm1oj20cl0apdhp.jpg
一个表可以看做二维阵列
每一行代表一个主体
列用来描述主体的特征
每个列保存某一种类型数据(整数,字符串,日期)

表的时间复杂度O(n) 如果要查找国家是UK的用户 就得一行一行的遍历

可以使用红黑树存放指定的列 列中还存放了指定行的位置

B+树索引

如果要查找两个值之间的多个元素时
select * from id where between 10 and 80;

平衡二叉树需要一个个去遍历节点 时间度是log(n)
B+树就可以优化这个过程
关于B树的大概思路
我的大概思路
先构建平衡二叉树
再构造叶子层的链表(思路可能是错的)
所有叶子节点的右节点都存放当前元素
左节点存放的是

//        B
//       / \
//      A   D
//          /\
//         C  F 



c的左节点存放的B
C是父节点的右链接吗 不是则向上查找直到找到右节点
但是这样肯定浪费了算力

图片

全局概览

核心组件:
进程管理器
网络管理器
文件系统管理器
内存管理器
安全管理器
客户端管理器

图片

简而言之 客户端管理器是处理客户单端通信的 客户端可以是一个网站服务器或者一个最终用户…

客户端管理器

通过一系列知名的API提供不同的方式来访问数据库
比如 JDBC ODBC

  • 当链接数据库时管理器先检查验证信息用户名和密码
    然后检查访问数据库的授权
  • 然后,管理器检查是否有空闲进程(或线程)来处理你对查询。
  • 管理器还会检查数据库是否负载很重。
  • 管理器可能会等待一会儿来获取需要的资源。如果等待时间达到超时时间,它会关闭连接并给出一个可读的错误信息。
  • 然后管理器会把你的查询送给查询管理器来处理。
  • 因为查询处理进程不是『不全则无』的,一旦它从查询管理器得到数据,它会把部分结果保存到一个缓冲区并且开始给你发送。
  • 如果遇到问题,管理器关闭连接,向你发送可读的解释信息,然后释放资源。
查询管理器

整个过程查询首先被解析并判断是否合法

查询解析器来检查语法
如果关键字拼错
或者顺序不对 where在select前面这种
分析查询汇总的表和字段
是否存在
对某类型字段是否合法

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

查询重写器

在这一步,我们已经有了查询的内部表示,重写器的目标是:
预优化查询
避免不必要的运算
帮助优化器找到合理的最佳解决方案

重写器 可以对查询进行重写
即优化
如果查询匹配了一种模式的规则 查询就会按照这条规则
来重写
如果查询可以优化就优化或者将匹配一部分复杂工作

  • 视图合并:如果你在查询中使用视图,视图就会转换为它的 SQL 代码。
  • 子查询扁平化:子查询是很难优化的,因此重写器会尝试移除子查询

优化前

SELECTPERSON.*

FROMPERSON

WHEREPERSON.person_keyIN

(SELECTMAILS.person_key

FROMMAILS

WHEREMAILS.mailLIKE'christophe%');

优化后


SELECT PERSON.*

FROM PERSON, MAILS

WHERE PERSON.person_key = MAILS.person_key

and MAILS.mail LIKE 'christophe%';

可优化的部分

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

原文

https://blog.csdn.net/albertfly/article/details/51318995

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、 Find the name, loan number and loan amount of all customers; rename the column name loan_number as loan_id. 2、 Find the names of all customers whose street includes the substring “Main”. 3、Find all customers who have a loan, an account, or both: 4、Find all customers who have both a loan and an account. 5、Find all customers who have an account but no loan. 6、Find the average account balance at the Perryridge branch. 7、 Find the number of tuples in the customer relation. 8、 Find the number of depositors in the bank. 9、 Find the number of depositors for each branch. 10、Find the names of all branches where the average account balance is more than $1,200. 11、Find all loan number which appear in the loan relation with null values for amount. 12、Find all customers who have both an account and a loan at the bank. 13、Find all customers who have a loan at the bank but do not have an account at the bank 14、Find all customers who have both an account and a loan at the Perryridge branch 15、Find all branches that have greater assets than some branch located in Brooklyn. 16、Find the names of all branches that have greater assets than all branches located in 1、创建一个School数据库,该数据库的主数据文件逻辑名称为SCHOOL_data,物理文件名为School.mdf,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为School_log,物理文件名为School.ldf,初始大小为1MB,最大尺寸为5MB,增长速度为1MB。 2、用SQL语句建立上述表,自定义主键和外键,对于student表建立约束条件:ssex仅能取male或female;sage在18和22之间。并完成下面的查询语句。 1、查询所有选修过“Bibliometrics”课的学生的姓名和成绩; 2、查询考试成绩不及格的学生的个数; 3、查询名字中至少含有一个“z”字符的学生的姓名、学号和性别; 4、查询选修了“Introduction to the Internet”课程的学生的学号及其成绩,查询结果按分数的降序排列; 5、查询“Zuo li”同学选修课程的总学时(time)数 6、查询年龄不大于20岁的学生的平均考试成绩; 7、查询 “computer science”专业学生选修 “Database System”的人数; 8、查询同时选修课程“Database System”和“Introduction to the Internet”的学生姓名; 9、查询选修的课程中含有“Wang gang”同学所有选修课程的学生姓名。 10、查询“Information Technology for Information Management”考试成绩为空的学生姓名及专业名称。 11、查询“computer science”专业学生每个人的选修课总学分。 12、查询个人考试平均成绩高于专业平均成绩的学生姓名 13、查询个人考试平均成绩高于女生平均成绩的男生姓名 14、查询比“computer science”专业所有学生年龄都大的学生姓名。 15、查询考试成绩仅有一科不及格学生姓名

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值