【CMU15-445 Part-12】Query Execution I

news2024/11/19 12:27:08

Part12-Query Execution I

Processing Models

Processing Model主要指的是明确如何去执行一个查询计划(top 2 bottom or bottom 2 top,operator之间的传递)。

Iterator Model

(volcano model/pipeline model);每个算子实现一个Next( ),父节点会调用子节点的next,然后子节点返回结果(下一个父节点需要处理的tuple);

对一个tuple来说这种模型能让查询计划中尽可能多的使用它,一个operator处理完返回传入下一个继续用该tuple。

Untitled

  1. 遍历子节点next返回的每个tuple,进行projection操作。

Untitled

Untitled

pipeline model的原因是针对一个tuple进行了一系列的操作,并且在对一个tuple处理的时候,其他还可以进行去tuple等操作,更像是流水线。当我们将某些东西放到内存之后,在对下一条数据处理前要尽可能多的对该数据进行处理。

有些算子不适合流水线处理,pipeline breaker (joins,subqueries,order by),在去做下个操作前,这些算子需要从子节点获取更多数据。iterator model再输出控制很简单(limit clauses)

Materialization Model

主要用在内存数据库。

调用Next的时候不想只返回一个tuple而是调用每个operator的时候就返回所有的tuples,不用逐个获取。假设需要limit 10,可以将查询信息向下传递来避免扫描很多tuples。返回的可以是一个单独的列或者一个materialized row

这里不同就是output返回的的all tuples。对OLTP wordload来说很好因为查询可以一次性获得少量或者一个tuple。对OLAP不好 因为数据量很大的时候在算子之间传递的代价就会很高

Untitled

difference? one tuple passing in M model and iterator model?

Vectorized/Bactch Model

调用next的时候传递的是a batch的tuples而非单个tuple,重写next。每次调用Next返回的tuple size 取决于hardware,取决于速度多快,是不是循序IO。设定一个n,如果buffer size 足够一个batch就像上返回一堆tuple。对OLAP友好,因为OLAP主要对表中大部分数据进行长时间的一个扫描处理(数据仓库)

Untitled

Plan Processing Direction

Approach #1 Top-to-Bottom

root开始 pull data from children,tuples

Approach #2 Bottom-to-Top

从叶子结点开始 向上推data,向上传递数据的时候得确保我们所正在处理的数据能够放在CPU cache and registers,对CPU友好但是对人难以解释。

Access Methods

叶子节点发生的事,通过access methods到DBMS表里面查找数据通过next进行传递。

三种基本方式:循序扫描sequential scan,索引扫描index scan以及multi-Index/”Bitmap” Scan

Sequential Scan

对1个table的每个page,取到bufferpool;迭代器遍历tuple,check是否符合。 DBMS一般会维护内部cursor来tracks last page/slot/tuple?

优化:prefectching(双缓冲)、buffer pool Bypass(用一个小buffer来对线程或者查询进行缓存 而不是去污染buffer pool 缓存)、

  • Zone Maps

    提前计算关于page中某列的聚合信息 明确是否需要去访问这些page。即:Min、Max\AVG\SUM\COUNT… DBMS会首先检查zone map然后才会决定会不会访问该page。有些是把zone map存到page里面,所以实际还是访问了page。有些保存在单独的page里面,zone map block、Zone page保存了不同page的zone map,类似于元数据的东西可能放在内存中。维护zone map代价也很高 一般不会用在OLTP中,而是在OLAP,读多写少。

  • Late Materialization

    对列式存储系统来说可以延迟将数据从一个oper 传播到下一个oper,只需要传递offset或者判断条件,具体数据很可能不需要的最后,因为列存最后组成tuple的话得拼接,代价大。下面的例子:filter以join算子不需要传递具体的数据因为对应的a,b列用不到,只需要最后去取c列。

    Untitled

  • Heap clustering/Clustering Index 聚簇索引

    Untitled

Index Scan

索引扫描,DBMS选取一个合适的index来找到查询所需要的tuples。选哪个index取决于:

  • 哪些属性上有index
  • 哪些属性是索引需要的
  • 属性的具体值,是否具有选择性能否查得更快
  • 具体的判断条件
  • unique index / non-unique index

以上是查询优化器要做的事情。

例子:在第一个场景中 要使用dept作为索引 只需要找到两个就可以了。第二个场景是99个人是CS的,就俩人小于30岁,用age作为索引,更有选择性

Untitled

  • Multi-Index Scan
    1. 对于每个匹配的index 计算负荷的record ids
    2. 根据查询的判断条件combine这些sets,and or
    3. Retrieve the records

Bitmap Scan in PG,没饿过bit对应了每个record的位置,进而可以使用位操作and or出结果。

Untitled

Index Scan Page Sorting

如果是非聚簇索引,如果输出结果并不是基于索引的id来进行排序,可能是其他的属性排序并且该属性上没有索引,沿着叶子节点扫描获取所有record id,根据page id排序。

DBMS 通常会先找到所有需要的 tuples,根据它们的 page id 来排序,完毕后再读取 tuples 数据,使得整个过程每个需要访问的 page 只会被访问一次。

Untitled

order by,subquery,join,limit,min,max are all pipeline breakers;

Expression Evaluation

where子句表示为一个表达式树expression tree,该tree上所有节点代表了条件判断中不同类型的表达式,

  • comparisons = < > ≠
  • conjunction:And Disjunction OR
  • Arithmetic Operators + - * /
  • 常量
  • tuple attribute references

Untitled

select * from s where B.value = ? + 1;

Prepared Statement 声明查询模板,占位符运行时填入,类似于调用函数

需要关注execution context

Untitled

优化where 1=1,JIT:just in time compilation。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1046480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab中clear,close all,clc功能详细说明

背景&#xff1a; 我们在写matlab程序时&#xff0c;首行总是先敲入&#xff1a;clear; close all; clc;&#xff0c;但你真的知道这三句话的具体作用嘛&#xff0c;下面进行详细说明和演示。 一、clear的功能 clear的功能&#xff1a;清理工作区变量&#xff0c;不清理前是…

每日一练 | 华为认证真题练习Day115

1、FEC(Forwarding Equivalence Class)转发等价类&#xff0c;是一组具有某些共性的数据流的集合&#xff1b;FEC可以根据地址进行划分&#xff0c;但是不能根据业务类型、QoS等要素进行划分。 A. 对 B. 错 2、关于OSI参考模型中网络层的功能说法正确的是&#xff1f; A. OS…

Linux部署elk日志监控系统

目录 一、简介 二、部署elasticsearch 2.1 安装jdk11&#xff08;jdk版本>11&#xff09; 2.2 下载安装包 2.3 授权elk用户 2.4 配置elasticsearch.yml 2.5 启动elasticsearch 三、部署logstash 3.1 启动测试 3.2 可能出现的报错 3.3 指定配置文件启动logstash 3.4 安装El…

【基于Qt和OpenCV的多线程图像识别应用】

基于Qt和OpenCV的多线程图像识别应用 前言多线程编程为什么需要多线程Qt如何实现多线程线程间通信 图像识别项目代码项目结构各部分代码 项目演示小结 前言 这是一个简单的小项目&#xff0c;使用Qt和OpenCV构建的多线程图像识别应用程序&#xff0c;旨在识别图像中的人脸并将…

作为产品经理,你是如何分析和管理你的产品需求的?

作为一名产品经理&#xff0c;分析和管理产品需求是非常重要的工作。在产品开发周期中&#xff0c;需求调研、需求分析、需求管理等环节都是非常关键的&#xff0c;因为好的需求管理能够直接影响产品的质量和用户体验。 需求调研 在进行需求调研的过程中&#xff0c;我们首先…

App开发者如何从立项着手,奠定商业化基础,完成0到1转变?

随着移动互联技术的发展&#xff0c;流量即价值的观念深入人心&#xff0c;大量不同细分领域的移动应用进入市场。根据工信部公布数据&#xff0c;2023年上半年&#xff0c;我国国内市场上监测到活跃的APP数量为260万款&#xff08;包括安卓和苹果商店&#xff09;&#xff0c;…

Visual Studio 如何删除多余的空行,仅保留一行空行

1.CtrlH 打开替换窗口&#xff08;注意选择合适的查找范围&#xff09; VS2010: VS2017、VS2022: 2.复制下面正则表达式到上面的选择窗口&#xff1a; VS2010: ^(\s*)$\n\n VS2017: ^(\s*)$\n\n VS2022:^(\s*)$\n 3.下面的替换窗口皆写入 \n VS2010: \n VS2017: \n VS2022: \n …

铁路用热轧钢轨

声明 本文是学习GB-T 2585-2021 铁路用热轧钢轨. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了铁路用钢轨的订货内容、分类、尺寸、外形、质量及允许偏差、技术要求、试验方法、检 验规则、标志及质量证明书。 本标准适用于3…

react import爆红

如上所示&#xff0c;会标红&#xff0c; 解决办法&#xff1a;在vscode内部SHiftCtrlP 输入Reload window, 如上的第一个&#xff0c;选中后回车&#xff0c;标红就没了&#xff0c;非常好用。

版本控制系统:Perforce Helix Core -2023

Perforce Helix Core是领先的版本控制系统&#xff0c;适用于需要加速大规模创新的团队。存储并跟踪您所有数字资产的更改&#xff0c;从源代码到二进制再到IP。连接您的团队&#xff0c;让他们更快地行动&#xff0c;更好地构建。 通过 Perforce 版本控制加速创新 Perforce H…

史上最严重的10起勒索软件攻击

与今天的勒索软件攻击相比&#xff0c;世界上首起勒索软件攻击简直就是小菜一碟。 1989年&#xff0c;出席世界卫生组织&#xff08;WHO&#xff09;艾滋病会议的数千名与会者回到家中&#xff0c;结果在自家的邮箱软盘里发现了一份关于感染艾滋病毒可能性的调查问卷&#xff…

手机能搜到某个wifi,电脑搜不到解决方法(也许有用)

方法一&#xff1a;更新驱动 下载驱动大师、驱动精灵等等驱动软件&#xff0c;更新网卡驱动 方法二 按 win 键&#xff0c;打开菜单 搜索 查看网络连接&#xff08;win11版本是搜这个名字&#xff09; 点击打开是这样式的 然后对 WLAN右击->属性->配置->高级 这…

等保二级测评国家收费标准是多少?统一的吗?

目前我国等保分为五个级别&#xff0c;不同级别要求和费用也不同。有小伙伴在问&#xff0c;等保二级测评国家收费标准是多少&#xff1f;统一的吗&#xff1f;这里就来给大家简单回答一下&#xff0c;仅供参考&#xff01; 等保二级测评国家收费标准是多少&#xff1f;统一的吗…

RabbitMQ消息可靠性保证机制--发送端确认

发送端确认机制 ​ RabbitMQ后来引入了一种轻量级的方式&#xff0c;叫发送方确认(publisher confirm)机制&#xff0c;生产者将信息设置成confirm&#xff08;确认&#xff09;模式&#xff0c;一旦信道进入了confirm模式&#xff0c;所有在该信道上面发送的消息都会被指派成…

python使用uiautomator2操作真机

测试环境&#xff1a;win10 64位&#xff0c;python3.10.4&#xff1b;真机&#xff0c;荣耀10青春版&#xff0c;Android版本10。 之前是在手机模拟器上操作的&#xff0c;参考我的文章python使用uiautomator2操作雷电模拟器_小小爬虾的博客-CSDN博客 一、将手机设置为开发者…

任务执行大数据量与高并发方案

大数据量高并发任务解决方案 场景 每个任务有十万条以上的数据&#xff0c;任务执行过程中对这些数据逐条做分析处理。 在同一段时间&#xff0c;会出现任务高并发执行&#xff0c;导致内存溢出 解决方案 1、分批处理 任务执行过程中&#xff0c;不一次性读取全量数据&…

将切分的图片筛选出有缺陷的

将切分的图片筛选出有缺陷的 需求代码 需求 由于之前切分的图像有一些存在没有缺陷&#xff0c;需要再次筛选 将可视化的图像更改后缀 更改为xml的 可视化代码 可视化后只有7000多个图像 原本的图像有1W多张 代码 # 按照xml文件删除对应的图片 # coding: utf-8 from P…

Java比较器之equals、comparable、comparator

文章目录 前言一、基本类型比较1.2.equals3.和equals的区别 二、对象的比较1.覆写基类的equals2.基于Comparable接口类的比较3.基于Comparator比较器比较4.三种方式对比 前言 在Java中&#xff0c;基本类型的对象可以直接比较&#xff0c;而自定义类型&#xff0c;默认是用equ…

秋招面经记录

秋招面经记录 MySQLRedis项目分布式框架java网络数据结构设计模式HR手撕 MySQL Mysql中有1000万条数据&#xff0c;每次查询10条&#xff0c;该如何优化&#xff08;答&#xff1a;Limit子查询优化&#xff09; select t.* from t_topic t LIMIT 90000,10; 对上面的mysql语句说…

【Java 进阶篇】数据定义语言(DDL)详解

数据定义语言&#xff08;DDL&#xff09;是SQL&#xff08;结构化查询语言&#xff09;的一部分&#xff0c;它用于定义、管理和控制数据库的结构和元素。DDL允许数据库管理员、开发人员和其他用户创建、修改和删除数据库对象&#xff0c;如表、索引、视图等。在本文中&#x…