【数据库】数据库物理执行计划最基本操作-表扫描机制与可选路径,基于代价的评估模型以及模型参数的含义

本文主要是介绍【数据库】数据库物理执行计划最基本操作-表扫描机制与可选路径,基于代价的评估模型以及模型参数的含义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

物理执行计划基本操作符

专栏内容

  • 手写数据库toadb
    本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。
    本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习。

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

文章目录

  • 物理执行计划基本操作符
  • 前言
  • 概述
  • 扫描表
    • 顺序扫描
    • 索引扫描
  • 排序扫描
  • 代价计算模型
    • 计算参数
  • 总结
  • 结尾

在这里插入图片描述

前言

随着信息技术的飞速发展,数据已经渗透到各个领域,成为现代社会最重要的资产之一。在这个大数据时代,数据库理论在数据管理、存储和处理中发挥着至关重要的作用。然而,很多读者可能对数据库理论感到困惑,不知道如何选择合适的数据库,如何设计有效的数据库结构,以及如何处理和管理大量的数据。因此,本专栏旨在为读者提供一套全面、深入的数据库理论指南,帮助他们更好地理解和应用数据库技术。

数据库理论是研究如何有效地管理、存储和检索数据的学科。在现代信息化社会中,数据量呈指数级增长,如何高效地处理和管理这些数据成为一个重要的问题。同时,随着云计算、物联网、大数据等新兴技术的不断发展,数据库理论的重要性日益凸显。

因此,本专栏的分享希望可以提高大家对数据库理论的认识和理解,对于感兴趣的朋友带来帮助。

概述

数据库执行计划的最后一步,是生成物理执行计划,物理执行计划是由一系列操作节点构成。其中最基本的操作符扫描表,一般都是执行计划的叶子节点。

本文主要分享物理执行计划的最基本操作扫描表,扫描表时排序,以及它的代价计划模型和估算,希望大家得到启示,感谢各位的浏览和点赞。

扫描表

SQL执行的目的都是要从表里拿到想要的数据,一般对于扫描表的节点,都会含有一个谓词,符合谓词的数据都会被返回。

表对应的数据块,一般都会存放在内存缓冲区中,扫描表时可以一个接一个的找到。扫描表时,可以有多种方法可以选择,比如顺序扫描,索引扫描,仅索引扫描。

顺序扫描

最常见的就是顺序扫描,顾名思义,就是从表的第一个数据块开始,每个数据块从第一个元组开始扫描,直到这个块的结尾,然后继续下一个块,直到所有表的数据块扫描结束。

索引扫描

对于表上建有索引的情况,正好谓词对应字段有索引,那么可以使用索引,避免顺序遍历表的所有数据块。索引的数据也是存放在内存缓存区中,遍历索引文件的所有数据块,扫描索引数据块上的索引元组。

如果是密集索引,就可以直接找到符合谓词的元组在表中的数据块上的位置,然后直接访问对应的表数据块,从该块的offset处读取元组。

如果是稀疏索引,通过索引定位到表的某个位置,还需要继续从此位置扫描表,直到找到符合谓词的元组。

直到索引文件的所有数据块扫描结束,整个扫描就会结束。通常索引文件相比表文件来说,小非常多。

对于查询结查字段,只有索引字段时,此时只用扫描密集索引文件,就可以得到元组字段,不需要扫描表文件,这就是仅索引扫描,当然实际应用中,会有事务隔离的处理,并不是所有情况下密集索引都能使用仅索引扫描。

排序扫描

对于含有order by子句的查询来说,扫描表的结果需要以排序的方式返回,另外还有一些关系代数的运算,需要基于排序的结果,所以这就用到了排序-扫描方式。

排序扫描节点的输入是要扫描的表,和排序字段的说明,在物理执行计划中有很多方式选择。

  • 对于排序字段上含有索引,而且是索引是带有顺序,如Btree索引,或者表数据的存储是按排序字段的顺序存储的;此时只进行表扫描或索引扫描即可;

  • 对于比较小的表,查询结果全部可以装入缓冲区,那么可以用常用的排序算法进行排序即可;

  • 对于非常大的表,查询结果并不能全部装入缓冲区时,就需要使用外排,通过几趟读写的算法才能完成排序,后面分享多路归并算法;

代价计算模型

在将逻辑查询计划转换为物理查询计划时,我们需要选择执行效率比较高的物理操作符进行执行,也可以说是选择最优执行路径。当出现几种执行路径时,如顺序扫描,索引扫描,路径选择时,首先对每种操作符的执行代价进行评估,才能选出最优的路径。

这是一种基于代价的选择最优路径的模式,按什么模型来计算操作符的代价呢,下面我们一起看看。

可用的缓冲区都是有限的,数据一般都会存储在磁盘上,当使用到时会加载到缓冲区,缓冲区满时也会利用替换策略,将暂时不用的数据置换到磁盘上。

那么在查询的过程中,读写磁盘的IO次数会是代价的一个衡量值。同时磁盘的读写IO耗时远远大于内存中的操作,所以磁盘代价将占查询成本的大部分,这样就可以简化操作符的代价计算为磁盘IO次数的计算。

基于代价的计算模型就生成了,下面我们看有那些参数来计算。

计算参数

  • 缓冲区大小(M), 我们假设可用的缓冲区能容纳的数据块为M,缓冲区是远远小于物理内存大小的;
  • 表占用的数据块数量(B), 当我们扫描表时,需要一个数据块一个数块的读出,这就和表文件所占数据块的多少有关系了,假设表占用了B个数据块,那么最多也就会产生B次IO;
  • 表的元组数量(T), 表中所有元组的数量T/B,就得到了每个数据块上的平均元组数量,最差情况是元组数量与块数相同;
  • 查询列对应的值数量,假如查询列为货物类型,那么它对应的就是有限类型;最差情况是与元组数量相等;

以上参数值的不同,都会影响我们查询处理时,磁盘IO的数目,后面会继续分享在扫描算法中的应用。

总结

物理执行计划的最基本节点就是扫描表,实际扫描表中有多种方式可以选择,通过代价计算模型可以选择最优路径最终执行。

有菜也有肉的分享,下面插一段hello world的代码;
以下是一个简单的 “Hello world”,在初始化函数中输出,在main之前会被调用:

#include <stdio.h>  __attribute((constructor))  void premain() {  printf("Hello, World!\n");  
}  int main() {  return 0;  
}

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

这篇关于【数据库】数据库物理执行计划最基本操作-表扫描机制与可选路径,基于代价的评估模型以及模型参数的含义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/424014

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了