执行模型

执行模型(Processing Model)定义了数据库系统如何执行一个查询计划。

Iterator Model

基本思想:采用树形结构组织操作符,然后中序遍历执行整棵树,最终根结点的输出就是整个查询计划的结果。

每个操作符(Operator)实现如下函数:

  • Next()

    • 返回值:一个tuple或者EOF。
    • 执行流程:循环调用孩子结点的Next()函数。
  • Open()Close():类似于构造和析构函数。

输出从底部向顶部(Bottom-To-Top)汇聚,且支持流式操作,所以又称为Valcano Model,Pipeline Model。

Materialization Model

基本思想:操作符不是一次返回一个数据,暂存下所有数据,一次返回给父结点。

相比于Iterator Model,减少了函数调用开销,但是中间结果可能要暂存磁盘,IO开销大。

可以向下传递一些暗示(hint),如Limit,避免扫描过多的数据。

更适用于OLTP而不是OLAP。

Vectoriazation Model

基本思想:操作符返回一批数据。

结合了Iterator Model和Materialization Model的优势,既减少了函数调用,中间结果又不至于过大。

可以采用SIMD指令加速批数据的处理。

对比

特性 Iterator Model Materialization Model Vectorization Model
数据处理单位 单条记录(tuple-at-a-time) 整个中间结果(table-at-a-time) 批量记录(vector/batch-at-a-time)
性能 函数调用开销高,效率低 延迟高,内存/I/O 开销大 函数调用开销低,SIMD 加速性能优异
内存使用 内存需求低 内存需求高 中等
I/O 开销 中等
缓存利用率
复杂性 实现简单 中等 实现复杂
适用场景 小型数据集,流式处理 中间结果复用的复杂查询 大型数据集,需高性能计算的场景

数据访问方式

主要有三种数据访问方式:

  1. 全表扫描(Sequential Scan)
  2. 索引扫描(Index Scan)
  3. 多索引扫描(Multi-Index Scan)

Sequential Scan

全表扫描的优化手段:

Data Skipping方法:

  1. 只需要大致结果:采样估计。
  2. 精确结果:Zone Map

Zone Map基本思想:化整为零,提前对数据页进行聚合。

执行 Select * From table Where val > 600时,下面的页可以直接跳过。

Index Scan

如何确定使用哪个索引:数据分布。

Multi-Index Scan

基本思想:根据每个索引上的谓词,独立找到满足条件的数据记录(Record),然后根据连接谓词进行操作(并集,交集,差集等)。

Halloween Problem

对于UPDATE语句,需要追踪更新过的语句,否则会出现级联更新的问题。

<999, Andy>执行更新,走索引扫描:

  1. 移除索引
  2. 更新Tuple,<1099, Andy>
  3. 插入索引
  4. (约束检查)

此时,如果不对<1099, Andy>进行标记,他满足Where子句,会被重新更新一次。

表达式求值

基本思想:采用树形结构,构建表达式树,用中序遍历方式执行所有求值动作,根结点的求值结果就是最终值。

数据库中哪些地方采用了树结构:

  • B+树:存储。
  • 树形结构+中序遍历求值:查询计划,表达式求值。

优化手段:JIT Compilatoin。将热点表达式计算结点视为函数,编译为内联机器码,而不是每次都遍历结点。

cmu15545笔记-查询执行(Query Excution)的更多相关文章

  1. 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序

    前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来 ...

  2. sql 查询执行的详细时间profile

    1.查看profile的设置 SHOW VARIABLES LIKE '%profil%' 结果如下:profiling OFF 为关闭状态 2.开启profile 结果: 3.执行需要执行的sql ...

  3. SQLServer查询执行计划分析 - 案例

    SQLServer查询执行计划分析 - 案例 http://pan.baidu.com/s/1pJ0gLjP 包括学习笔记.书.样例库

  4. MySQL查询执行过程

    MySQL查询执行路径 1. 客户端发送一条查询给服务器: 2. 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果.否则进入下一阶段: 3. 服务器端进行SQL解析.预处理,再由优 ...

  5. [转载]MongoDB学习 (五):查询操作符(Query Operators).1st

    本文地址:http://www.cnblogs.com/egger/archive/2013/05/04/3059374.html   欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 查询操作符(Quer ...

  6. mysql 存储过程:提供查询语句并返回查询执行影响的行数

    mysql 存储过程:提供查询语句并返回查询执行影响的行数DELIMITER $$ DROP PROCEDURE IF EXISTS `p_get_select_row_number`$$ CREAT ...

  7. 跟我一起读postgresql源码(六)——Executor(查询执行模块之——查询执行策略)

    时光荏苒,岁月如梭.楼主已经很久没有更新了.之前说好的一周一更的没有做到.实在是事出有因,没能静下心来好好看代码.当然这不能作为我不更新的理由,时间挤挤还是有的,拖了这么久,该再写点东西了,不然人就怠 ...

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

    接前文跟我一起读postgresql源码(九)--Executor(查询执行模块之--Scan节点(上)) ,本篇把剩下的七个Scan节点结束掉. T_SubqueryScanState, T_Fun ...

  9. MySQL架构总览->查询执行流程->SQL解析顺序

    Reference:  https://www.cnblogs.com/annsshadow/p/5037667.html 前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后 ...

  10. 步步深入MySQL:架构->查询执行流程->SQL解析顺序!

    一.前言 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序 ...

随机推荐

  1. mariadbl数据库环境迁移

    前言: 数据库的主要作用就是对数据进行保存和维护,所以备份数据是数据库管理中最常用的操作.为了防止数据库意外崩溃或硬件损伤而导致的数据丢失,数据库系统提供了备份和恢复策略.保证数据安全的最重要的一个措 ...

  2. C#/.NET/.NET Core定时任务调度的方法或者组件[转载]

    原文由Rector首发于 码友网 之 <C#/.NET/.NET Core应用程序编程中实现定时任务调度的方法或者组件有哪些,Timer,FluentScheduler,TaskSchedule ...

  3. Docker 构建多平台镜像

    构建多平台镜像的方法分为两种:一种是在不同平台的机器上分别构建并推送对应平台的镜像,然后通过 Docker Manifest 将两个镜像标签合并为一个.另一种是通过 Docker buildx 在一台 ...

  4. 一分钟搭建Ghost个人网站博客系统

    什么是Ghost博客系统 Ghost 是一款设计简约.主题精致的个人博客系统,Ghost支持多用户创建和编辑,支持Markdown格式撰写文章,编辑的内容可即时预览. 创建轻量云主机 这里默认你已经有 ...

  5. 程序员失业日记4:半个月拿下4个offer

    上篇文章很多小伙伴留言也讲到自己被公司裁员,还有的细心的小伙伴说去年九月就被裁了,在看一下文章的发布时间,绷不住了.先和大家说一下,我已经找到工作,因为最近工作一直都很忙,加上自己也比较懒,所以就拖了 ...

  6. 神经网络之卷积篇:详解卷积神经网络示例(Convolutional neural network example)

    详解卷积神经网络示例 假设,有一张大小为32×32×3的输入图片,这是一张RGB模式的图片,想做手写体数字识别.32×32×3的RGB图片中含有某个数字,比如7,想识别它是从0-9这10个数字中的哪一 ...

  7. 一次Java性能调优实践【代码+JVM 性能提升70%】

    这是我第一次对系统进行调优,涉及代码和JVM层面的调优.如果你能看到最后的话,或许会对你日常的开发有帮助,可以避免像我一样,犯一些低级别的错误.本次调优的代码是埋点系统中的报表分析功能,小公司,开发结 ...

  8. Dell存储备份告警:

    创建时间 修改日期 对象名称 消息 类型 告警状态 已确认 告警定义 类型 23-3-12 11:59:26 23-3-12 11:59:37 copyMirrorswap 2 CMs Operati ...

  9. ASP.NET Core – Configuration & Options

    前言 之前就写过 Asp.net core 学习笔记 ( Configuration 配置 ) 只是有点乱, 这篇作为整理版. 项目中会有许许多多的 Config 要设定. 比较好的管理方式是把它们放 ...

  10. Azure 入门系列 (第一篇 Virtual Machine 和 SQL Server)

    前言 终于有机会自己搞 Azure 了. 以前都是找代理做,近期代理 support 越来越弱了. 看来是 right time 自己搞了. 以前写过一些关于 Azure 的笔记: Azure key ...