数据库优化(学习笔记)

前言

数据库优化确实是比较重要的板块,也是面试数据开发岗位几乎必考的面试题。

本菜鸡这学期学了一门数据库相关课《Data Storing and Retrieving》,字面意思理解也就是说最重要的两大板块:一是数据存储,二是数据检索。这两个板块的优化,我认为其实就是数据库的优化。

其实这门课,个人觉得往深了读就非常的CS,像本人这种本科非CS的,基本上只能Dive到数据结构这一层,再往下的那些非常具体的数据存储读取方式,就无能为力了。

但我会试着用比较浅显易懂的描述,让一些不是CS背景的同学也能够看懂,最好能指出我的错误,大家一起成长嘛hh。

所以以下内容,都是

本人理解,非绝对正确!!!

本人理解,非绝对正确!!!

本人理解,非绝对正确!!!

欢迎指正交流,拒绝阴阳怪气。

首先上来的几个lecture,我认为其实算是数据库的语言基础,例如关系代数、sql语句以及约束等等,其实最终目的就是让你能够运用SQL语言来写一些操作,这个我认为是一个基本工具,没什么好说的,多用就熟了。唯一要说的是在学SQL之前,学习一下ER图和关系代数,确实会对SQL的逻辑有更加清晰的认识,对一些复杂的SQL语句编写很有帮助

下图是一张较为完整的数据库操作的层次图,这些SQL语句的执行和操作,体现在较为上层,即较为应用层的层次,对应图中是前面两个:

  • Query optimization and execution

  • relational operator

接下来就是数据库的分析(有分析就有改进/优化嘛)了。下面我们重现“通过一个操作(SQL语句)读取DB中数据”的完整过程。

  • Files and Access Methods

  • Disk space management(数据在外部硬盘中的存储管理)

  • Buffer management(这里的buffer,缓存,我理解就是硬盘存储加载到内存中的管理机制)

1. 首先我们要知道,我们的数据是怎么存储的:(以本地存储为例子,分布式最后面再展开总结,这里的知识在计算机原理里面更详细、正确)

在我的理解中,计算机的存储其实大致分为两种,一种是读写比较快但是空间有限的内存(RAM),一种是读写比较慢但是空间比较大的磁盘或者硬盘(Disks)。

至于为啥他们的读写有快慢之分,主要原因是物理材料和工作原理的不同。而且内存失电会丢失存储,硬盘不会。

所以我们平时的数据为了存储安全,肯定是存放在硬盘中的,那么照硬盘的规矩,就按地址存储;等到需要CPU对某些数据进行操作时,才加载到内存中。

这里有比较重要的一个点就是,内存去硬盘里读取数据,并不是只读那么一条数据,比如我现在要读取一个数据,地址存放在0x30-0x3F,那内存不会只读这么一片,他可能会把0x30-0x3F上上下下几十K的存储都搬进内存。

2. File organization,数据在外部硬盘中的存储

关系型数据库,常见地会被分割为多个pages,每个page的存储大小为4KB-8KB。

数据在外部存储单元中,主要有三种存储方式:

  • Heap(random order) file:无序,底层结构类似于链表;

那比如说有100,000个用户,如果我们不借助于任何结构或者算法的帮助,像个憨憨,我们想筛选出年龄大于30岁的用户,我们的数据库系统会需要怎么做呢。

我们需要先从硬盘里面,拿出5页数据(比如内存最多能加载5页),逐条查看这5页数据中的每一行,看看年龄是否大于30。最终,我们扫描了整个数据库100,000条数据,才得到了结果。

  • Sorted file:数据会以某个key为依据,对数据库进行aggregate和排序;

比如这100,000个用户,以ID为依据,从小到大排好存储。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值