(十二)数据库查询处理之Query Execution(1)
(十二)数据库查询处理之Query Execution(1)
1. 写在前面
- 这一大部分就是为了Lab3做准备的
- 每一个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可以延迟拼接元组。到最上层的操作再进行元祖拼接

对于上面,这个操作而言我们进行一些分析
- 获取a表中满足要求的行号比如(0 ,1,3)并往上传递
- 获取b中在(0,1,3)行满足要求的行号比如(0,3)然后继续往上传递
- 在最上层元素我们就可以直接在c中的(0,3)行进行AVG操作
3. HEAP CLUSTERING
就是前面说过的聚簇索引。

6. index scan
- 多index scan

这个比较简单对于每一个索引根据条件获取一个集合。然后把集合结合起来最后根据另一个查询条件获得结果
2. INDEX SCAN PAGE SORTING
检索元组在非聚簇索引中是十分低效的
DBMS可以根据page id对于元组进行排序。这样就可以把我们随机访问变成顺序访问

7. EXPRESSION EVALUATION

当执行语句发生的时候。我们会有一个Execution Context的东西来保存我们的上下文
上下文中包含
当前元组
执行的参数
Table的Scheme
8.总结
- 相同的query plan 会有不同的执行方法
- 要尽可能多的利用index scan
- 表达式树虽然很直观但是非常慢
(十二)数据库查询处理之Query Execution(1)的更多相关文章
- [Java面试十二]数据库概念相关
1. 什么是存储过程?它有什么优点? 答:存储过程是一组予编译的SQL语句,它的优点有: 允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次. 允许更快执 ...
- Python3.5 学习十二 数据库介绍
MYSQL介绍: 主流三种数据库:Oracle.Mysql.Sqlserver Mysql安装和启动: windows 1安装 2启动服务 3进入bin目录,打开命令行 4 mysqladmin -u ...
- Hibernate(十二)Criteria查询
一.简述 Criteria是一种比hql更面向对象的查询方式.Criteria 可使用 Criterion 和 Projection 设置查询条件.可以设置 FetchMode(联合查询抓取的模式 ) ...
- 跟我一起读postgresql源码(十二)——Executor(查询执行模块之——Materialization节点(下))
接前文,我们继续说剩下的4个Materialization节点. 7.SetOp节点 SetOp节点用于处理集合操作,对应于SQL语句中的EXCEPT.INTERSECT两种集合操作,至于另一种集合操 ...
- oracle学习笔记(十二) 查询练习(二) 高级查询
高级查询练习 /*--------------------------------------------- 分组查询 -------------------------------------*/ ...
- 50个SQL语句(MySQL版) 问题十二
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- m_Orchestrate learning system---三十二、数据库字段判断为空时容易出现问题,如何从根本上解决这个问题
m_Orchestrate learning system---三十二.数据库字段判断为空时容易出现问题,如何从根本上解决这个问题 一.总结 一句话总结:字段禁止为空,设置默认值0即可 禁止 空 默认 ...
- OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa
元数据最本质.最抽象的定义为:data about data (关于数据的数据).它是一种广泛存在的现象,在许多领域有其具体的定义和应用. JDBC中的元数据,有数据库元数据(DatabaseMeta ...
- 工程师技术(二):postfix基础邮件服务、postfix空客户端邮件服务、搭建mariadb数据库系统、配置一个数据库、使用数据库查询
一.postfix基础邮件服务 目标: 本例要求在虚拟机server0上配置 postfix 基础服务,具体要求如下: 1> 监听本机的所有接口 2> 将邮件域和邮件服务主机名都改为 ...
随机推荐
- 使用kubekey安装kubesphere
下载 KubeKey KubeKey 是新一代 Kubernetes 和 KubeSphere 安装器,可帮助您以简单.快速.灵活的方式安装 Kubernetes 和 KubeSphere. expo ...
- 从问题入手,深入了解JavaScript中原型与原型链
从问题入手,深入了解JavaScript中原型与原型链 前言 开篇之前,我想提出3个问题: 新建一个不添加任何属性的对象为何能调用toString方法? 如何让拥有相同构造函数的不同对象都具备相同的行 ...
- 一统江湖的大前端(10)——inversify.js控制反转
<大史住在大前端>前端技术博文集可在下列地址访问: [github总基地][博客园][华为云社区][掘金] 字节跳动幸福里大前端团队邀请各路高手前来玩耍,团队和谐有爱,技术硬核,字节范儿正 ...
- workflow定时任务部分失败
workflow遇到一个问题,每天定时任务导致部分失败,截图如下 目前这个问题现场出现过是重启wf解决的 ,但是也给研发排查了,根本原因不清楚,不确保现场还会再遇到.
- c++格式化输入输出以及操纵器的使用
C++格式化输入和输出 1,ios类中定义的格式控制标志 ios类中定义了一个数据成员:格式控制标志字,long x_flags x_flags每一位的状态值用枚举符号常量定义:如下列出常用几个 en ...
- CF1474-D. Cleaning
CF1474-D. Cleaning 题意: 给出一个长度为\(n\)的正整数序列,你可以对序列进行如下操作: 对序列中相邻的两个数字\(a_{i}, a_{i+1}\)同时减去一个数字\(t(t&l ...
- k8s-2-集成apollo配置中心
主题: 在k8s中集成Apollo配置中心 架构图 一.配置中心概述 配置的几种方式 本课讲得是基于配置中心数据库实现 配置管理的现状 常见的配置中心 主讲:k8s configmap,apollo ...
- 生成不带签名(BOM)的UTF8格式的XML
生成XML的一种方法如下: using System.Xml; private void SaveXML(string savePath) { XmlWriterSettings setting = ...
- Redis 哨兵高可用(Sentinel)
哨兵机制是 Redis 高可用中重要的一环,其核心是 通过高可用哨兵集群,监控主从复制的健康状态,并实现自动灾备: 哨兵集群以集群的方式进行部署,这种分布式特性具有以下优点: 避免系统中存在单点,防止 ...
- leetcode28 strstr kmp bm sunday
字符串匹配有KMP,BM,SUNDAY算法. 可见(https://leetcode-cn.com/problems/implement-strstr/solution/c5chong-jie-fa- ...