(十二)数据库查询处理之Query Execution(1)

1. 写在前面

  1. 这一大部分就是为了Lab3做准备的
  2. 每一个query plan都要实现一个next函数和一个init函数

对于next函数每次调用时,返回一个元组或空标记(如果没有更多元组

2. 迭代模型(ITERATOR MODEL)

对于上面这个图的理解就是获取所有的r.id然后构建hash表

然后在right的关系中获取出所有满足要求的S.ID

这里的evalPred(t)就等价于 S.value > 100

几乎所有的DBMS都是用上面的方法。但是允许我们流水线化的实现

不过一些操作必须是顺序化的如Joins、Order By

3. MATERIALIZATION 模型

一次处理所有输入,然后一次获得它的所有输出。

可以发现这种实现没有了next函数(可以把next理解成一种迭代器)

而是在一个list中放了所有满足要求的输入。然后最后也是获得所有输出

对于OLTP(主要是对数据的增删改)工作负载更好,因为一次访问少量元组。→降低执行/协调开销。→更少的函数调用。

Not good for OLAP(主要是对于大型数据的分析) queries with large intermediate results.

4. VECTORIZATION 模型

和上面模型的区别是这种模型用batch代替了全部

这种方法适合OLAP因为它大大减少了每个运算符的执行次数

5. 对于顺序扫描的优化

DBMS可以访问存储于table中的数据的最简单方法莫过于顺序扫描法

for page in table.pages:
for t in page.tuples:
if (check(t)):
// DO something

很显然这种方法不好。下面来看一些对于这个方法的简单优化

1. Zone MAPS

先维护一些关于这个page 的信息

对于这个page那们我们如果要执行

SELECT * FROM TABLE WHERE val > 500

我们就不用访问这个page了因为我们通过Zone Map 知道了这个page里最大的val为400.

2. LATE MATERIALIZATION

DBMS可以延迟拼接元组。到最上层的操作再进行元祖拼接

对于上面,这个操作而言我们进行一些分析

  1. 获取a表中满足要求的行号比如(0 ,1,3)并往上传递
  2. 获取b中在(0,1,3)行满足要求的行号比如(0,3)然后继续往上传递
  3. 在最上层元素我们就可以直接在c中的(0,3)行进行AVG操作

3. HEAP CLUSTERING

就是前面说过的聚簇索引。

6. index scan

  1. 多index scan

这个比较简单对于每一个索引根据条件获取一个集合。然后把集合结合起来最后根据另一个查询条件获得结果

2. INDEX SCAN PAGE SORTING

检索元组在非聚簇索引中是十分低效的

DBMS可以根据page id对于元组进行排序。这样就可以把我们随机访问变成顺序访问

7. EXPRESSION EVALUATION

当执行语句发生的时候。我们会有一个Execution Context的东西来保存我们的上下文

上下文中包含

当前元组
执行的参数
Table的Scheme

8.总结

  1. 相同的query plan 会有不同的执行方法
  2. 要尽可能多的利用index scan
  3. 表达式树虽然很直观但是非常慢

(十二)数据库查询处理之Query Execution(1)的更多相关文章

  1. [Java面试十二]数据库概念相关

    1. 什么是存储过程?它有什么优点? 答:存储过程是一组予编译的SQL语句,它的优点有:     允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次.     允许更快执 ...

  2. Python3.5 学习十二 数据库介绍

    MYSQL介绍: 主流三种数据库:Oracle.Mysql.Sqlserver Mysql安装和启动: windows 1安装 2启动服务 3进入bin目录,打开命令行 4 mysqladmin -u ...

  3. Hibernate(十二)Criteria查询

    一.简述 Criteria是一种比hql更面向对象的查询方式.Criteria 可使用 Criterion 和 Projection 设置查询条件.可以设置 FetchMode(联合查询抓取的模式 ) ...

  4. 跟我一起读postgresql源码(十二)——Executor(查询执行模块之——Materialization节点(下))

    接前文,我们继续说剩下的4个Materialization节点. 7.SetOp节点 SetOp节点用于处理集合操作,对应于SQL语句中的EXCEPT.INTERSECT两种集合操作,至于另一种集合操 ...

  5. oracle学习笔记(十二) 查询练习(二) 高级查询

    高级查询练习 /*--------------------------------------------- 分组查询 -------------------------------------*/ ...

  6. 50个SQL语句(MySQL版) 问题十二

    --------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...

  7. m_Orchestrate learning system---三十二、数据库字段判断为空时容易出现问题,如何从根本上解决这个问题

    m_Orchestrate learning system---三十二.数据库字段判断为空时容易出现问题,如何从根本上解决这个问题 一.总结 一句话总结:字段禁止为空,设置默认值0即可 禁止 空 默认 ...

  8. OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa

    元数据最本质.最抽象的定义为:data about data (关于数据的数据).它是一种广泛存在的现象,在许多领域有其具体的定义和应用. JDBC中的元数据,有数据库元数据(DatabaseMeta ...

  9. 工程师技术(二):postfix基础邮件服务、postfix空客户端邮件服务、搭建mariadb数据库系统、配置一个数据库、使用数据库查询

    一.postfix基础邮件服务 目标: 本例要求在虚拟机server0上配置 postfix 基础服务,具体要求如下: 1> 监听本机的所有接口    2> 将邮件域和邮件服务主机名都改为 ...

随机推荐

  1. Redis-第七章节-持久化

    目录 概述 RDB AOF 如何选择持久化机制 1.概述 Redis 是内存数据库,如果不能将内存中的数据保存到磁盘中,那么一旦服务器进程退出,服务器的数据库数据也会消失,所以Redis提供了持久化的 ...

  2. F - F(最小生成树)

    题意:连通各点最短距离,最小生成树. You are assigned to design network connections between certain points in a wide a ...

  3. 2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program(DFS计算图中所有环的长度)

    题目链接:https://codeforces.com/gym/102361/problem/F 题意 有 \(n\) 个点和 \(m\) 条边,每条边属于 \(0\) 或 \(1\) 个环,问去掉一 ...

  4. HDU4787 GRE Words Revenge【AC自动机 分块】

    HDU4787 GRE Words Revenge 题意: \(N\)次操作,每次记录一个\(01\)串或者查询一个\(01\)串能匹配多少个记录的串,强制在线 题解: 在线的AC自动机,利用分块来降 ...

  5. 2020牛客暑期多校训练营(第一场)Easy Integration

    传送门:J. Easy Integration 题意:给你n,求这个积分,最后的结果分子是记为p,分母记为q. 求(p*q-1)mod 998244353. 题解:比赛完看到巨巨说这是贝塔函数,我一搜 ...

  6. Buy the Ticket HDU - 1133 大数dp

    题意: 演唱会门票售票处,那里最开始没有零钱.每一张门票是50元,人们只会拿着100元和50元去买票,有n个人是拿着50元买票,m个人拿着100元去买票. n+m个人按照某个顺序按序买票,如果一个人拿 ...

  7. 牛客练习赛70 A.重新排列 (,字符串思维)

    题意:有一个模板串,给你\(T\)个字符串,选取最短的子串,使其重新排列后包含模板串,求最短的子串的长度 题解:遍历字符串,记录每个字符出现的最后位置,每记录一个后再遍历子串,找到子串需要的所有的字符 ...

  8. 国产网络损伤仪SandStorm -- 为什么数据流还是走Bypass链路?

    如果你在使用网络损伤仪SandStorm测试移动互联网的应用程序或者在仿真所谓"弱网测试"的时候,发现所有的数据流还是在走Bypass链路,并没有预期地走自己创建的仿真链路,那么你 ...

  9. 网络协议 & 协议体系结构模型

    基本知识概述 网络协议是什么? 为进行网络中的数据交换,而建立的规则(约定),就称为网络协议 网络协议的三个组成要素? 语法:数据与控制信息的结构或格式 语义:发出何种控制信息,完成何种动作,作出何种 ...

  10. 一个操作系统的实现sudo mount -o loop pm.img /mnt/floppy mount point /mnt/floppy does not exist losetup device is busy

    部分参考:https://blog.csdn.net/u012323667/article/details/79266623 一. sudo mount -o loop pm.img /mnt/flo ...