【数据库概论】第九章 关系查询处理和查询优化
第九章 关系查询处理和查询优化
本章主要介绍关系数据库查询管理和查询优化,主要分为代数优化(又称逻辑优化)和物理优化(也称非代数优化)。
9.1 关系型数据库系统的查询处理
查询处理是关系型数据库管理系统执行查询语句的过程,主要负责将用户提交给数据库管理系统的查询语句转化为高效的执行计划
1.查询处理步骤
关系数据库管理系统查询处理分为四个步骤:查询分析、查询检查、查询优化和查询执行
查询分析
首先对查询语句进行扫描、词法分析和语法分析。
查询检查
对合法的查询语句进行语义检查。如果该用户没有相应访问权限或者违反了完整性约束,就拒绝执行该查询。但是这时候完整性检查时初步的、静态的检查。检查之后将SQL查询语句转化为内部标识,也就是等价的关系代数表达式。DBMS一般都用语法分析树来表示扩展的关系代数表达式,对于这部分,更详细的请参见《编译原理》
查询优化
查询优化是选择一个高效执行的查询处理策略。查询优化方法按照优化的层次一般可分为代数优化和物理优化
查询执行
根据优化器得到的策略生成查询执行计划,由代码生成器生成执行这个查询计划的代码,然后执行并返回结果
2.实现查询操作的算法
1.选择操作的实现
(1)简单的全表扫描算法
全表扫描算法只需要很少内存就可以运行而且控制简单。但是对于规模大的表进行顺序扫描,效率将会非常低。
(2)索引扫描算法
如果选择条件中的属性上有索引(比如B+树索引或者hash索引),可以使用索引扫描的方法,首先通过索引找到满足条件的元组指针,再通过指针在基本表中查询元组。一般情况下,当选择率较低的时候,基于索引的选择算法要优于全表扫描算法,但是当选择率比较高的时候,或者要查找的元素均匀分布在表中的时候,使用索引的性能还不如全表扫描。
2.连接操作的实现
连接操作时查询处理中最常用也是最耗时的操作之一。比如:
SELECT * FROM Student,SC WHERE Student.Sno=Sc.Sno
(1)循环嵌套算法
最简单可行的算法,对于外层循环的每一个元组,检索内层循环中的每一个元组。类似于双层for循环,是最简单通用的连接算法,但是效率较低。
(2)排序-合并算法
这是等值链接常用的算法,适合参与连接的诸表已经排好序的情况。其具体步骤是:
- 如果参与连接的表没有排好序,则先对两表的连接属性N进行排序。使用最高效的排序算法快排,时间复杂度为O(nlog2n)
- 取出A表的第一个行的连接属性N,依次扫描B表中属性N相同的元组,把他们联结起来
- 当扫描到和当前A表元组N属性不一样的B表元组的时候,返回A表扫描他的下一个元组,再扫描B表中具有相同的N属性的元组,连接
这样子两个表都只需要扫描一次,但是如果两表无序,那需要承受两次排序的额外开销。但是一般对于大型表,先排序后使用该算法执行连接,总的时间开销还是会减少的。
(3)索引连接算法
算法步骤如下:
- 在B表上已经建立了属性N的索引
- 对于A表上的每一元组,由该元组的属性N通过B的索引查找找到相应的B元组
- 把这些B元组和A中的元组连接起来
(4)hash join算法
该算法也是处理等值链接的算法,他把连接属性作为hash码,用同一个hash函数将A表和B表中的元组散列到hash表中。第一步为划分节点,创建hash表,对包含较少元组的表进行进一步处理,将他的元组按照hash函数分散到hash表的桶中;第二部,试探阶段,对另一个表进行一遍处理,把该表的元组也按照同一个hash函数进行散列,找到适合的hash桶,并且把两个表中处于同一个桶的元组联系起来
9.2 关系数据库系统的查询优化
查询优化概述
查询优化的有点在于用户不必考虑如何最好的表达查询已获得较高效率,系统会自动选择最高效率的方式,而且系统可以比用户程序优化做的更好
目前关系数据库管理系统通过某种代价模型计算出各种查询方式所需要的代价,在集中式数据库中,查询执行开销总代价组成如下:
总代价=IO代价+CPU代价+内存代价+通信代价
9.3 代数优化
代数优化的策略是用过对关系代数表达式的等价变换来提高查询效率。常用的等价变换规则有:
1.连接、笛卡尔积交换律
2.连接、笛卡尔积结合律
3.投影的串接定律
4.选择的串接定律
5.选择与笛卡尔积的交换律
6.选择与投影操作的交换律
7.选择与并的分配率
查询树的启发式优化
启发式优化指的是大多数情况下都适用,但是并不是每种情况下都是最好的规则。启发式规则优化是定性的选择,比较粗糙,但是实现简单而且优化本身的代价较小,适合解释执行的系统。
以下的规则对查询树有一定的优化作用:
- 选择运算应该尽可能先做
- 把对同一个关系的投影运算和选择运算同时进行
- 把投影同其前后的双目运算结合起来
- 把某些选择同他前面需要执行的笛卡尔积结合起来成为一个连接运算
- 找出公共子表达式
9.4 物理优化
物理优化要选择高效合理的操作算法或者存取路径,求得优化的查询计划,达成查询优化目标。选择的方法可以是:
- 基于规则的启发式优化
- 基于代价估算的优化
基于启发式规则的存取路径选择优化
1.选择操作的启发式规则
对于小关系,直接使用全表顺序扫描
对于大关系,启发式规则有:
- 对于选择条件是“主码=值”的查询,查询结果最多是一个原则,可以选择主码作为索引,一般数据库会主动建立主码索引
- 对于选择条件是“非主属性=值”的查询,并且选择列上有索引,则要估算查询结果的元组数目。如果比例小于10%则使用索引扫描方法,否则使用全表顺序扫描。
- 对于选择条件是属性上的非等值查询或者范围查询,并且选择列上有索引,处理方法和2一样
- 对于用AND连接的合取选择条件,如果涉及到这些属性的组合索引,则优先采用组合索引扫描方法,如果有一般索引,则可以使用索引扫描,不然依然是全表顺序扫描。
- 对于OR连接的选择条件,一般使用全表顺序扫描。
2.连接操作的启发式规则
-
如果2个表都已经按照连接属性排序,则使用排序-合并算法
-
如果一个表在连接属性上有索引,则选用索引连接算法
-
如果上两个规则都不适用,而且其中一个表比较小,可以使用hash join算法。
相关文章:
【数据库概论】第九章 关系查询处理和查询优化
第九章 关系查询处理和查询优化 本章主要介绍关系数据库查询管理和查询优化,主要分为代数优化(又称逻辑优化)和物理优化(也称非代数优化)。 9.1 关系型数据库系统的查询处理 查询处理是关系型数据库管理系统执行查询…...
(WIP) my cloud test bed (by quqi99)
作者:张华 发表于:2023-03-10 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 问题 想创建一个local local test bed, 用来方便做各种云实验,如openstack, k8s, ovn, lxd等…...
git | git 2023 详细版
文章目录一、Git命令1.2 设计用户签名1.3 初始化本地库1.4 查看本地库状态1.5 添加至暂存区1.6 从暂存区删除1.7 将暂存区的文件提交到本地库1.8 查看版本信息二、Git分支2.1 查看分支2.2 创建分支2.3 切换分支2.4 合并分支三、GitHub3.1 代码克隆clone3.2 给库取别名3.3 推送本…...
camunda流程引擎基本使用(笔记)
文章目录一、camunda基础1.1 安装与部署流程引擎1.2 流程引擎结构1.3 流程引擎的基本使用1.3.1 创建一个BPMN Diagram1.3.2 实现一个外部工作者1.3.3 部署流程1.3.4 创建一个流程实例并消费1.3.5 向流程中添加用户任务1.3.6 添加网关1.3.7 业务规则二、Java 集成流程引擎2.1 为…...
JS之数据结构与算法
前言数据结构是计算机存储、组织数据的方式,算法是系统描述解决问题的策略。了解基本的数据结构和算法可以提高代码的性能和质量。也是程序猿进阶的一个重要技能。手撸代码实现栈,队列,链表,字典,二叉树,动态规划和贪心算法1.数据结构篇1.1 栈栈的特点:先进后出clas…...
CnOpenData·A股上市企业数字化转型指数数据
一、数据简介 企业数字化转型是近年来中国社会各界重点关注的领域,但基础数据的不完善在很大程度上制约了相关科学研究的开展。构建合理、科学的数字化转型指标体系有利于学者定量地研究企业数字化的相关问题,也有利于衡量企业的数字化水平。广东金融学院…...
VMware16pro虚拟机安装全过程
很多时候需要用到Linux系统,简单的一种方式可以是:Windows系统运行Linux(Windows Subsystem for Linux)不过有些时候还是需要虚拟机来运行Linux,也更方便点,比如在做嵌入式系统的烧录等操作都需要Linux环境…...
阿里云第六代云服务器最新价格表(计算型c6、通用型g6和内存型r6)
目前阿里云第六代云服务器有计算型c6、通用型g6和内存型r6实例。计算型c6实例有2核4G、4核8G、8核16G配置可选,主要适用于网站应用、批量计算、视频编码等场景。通用型g6实例有2核8G、4核16G、8核32G配置可选,适用于各种类型的企业级应用,网站…...
微小目标识别研究(2)——基于K近邻的白酒杂质检测算法实现
文章目录实现思路配置opencv位置剪裁实现代码自适应中值滤波实现代码动态范围增强实现代码形态学处理实现代码图片预处理效果计算帧差连续帧帧差法原理和实现代码实现代码K近邻实现基本介绍实现代码这部分是手动实现的,并没有直接调用相关的库完整的代码——调用ope…...
2022-06-14至2022-08-11 关于复现MKP算法的总结与反思
Prerequisite 自2022年6月14日至2022年8月11日的时间内,我致力于完成A Hybrid Approach for the 0–1 Multidimensional Knapsack problem 论文的复现工作,此次是我第一次进行组合优化方向的学习工作,下面介绍该工作内容发展过程以及该工作结…...
IBMMQ教程二(window版安装)
下载下载地址:https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/我这里选择的是9.1.0.0版本安装将下载完成的压缩包解压双击Setup.exe直接运行点击软件需求查看系统配置是否满足,右边绿色的对号说明满足需求,…...
Java | HashSet 语法
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。 HashSet 允许有 null 值。 HashSet 是无序的,即不会记录插入的顺序。 HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须…...
js学习4(运算符)
### 1.算数运算符: 、-、*、\、%(取余)、**(幂方) ## 优先级 同数学课程,可以加括号 ### 2.自增和自减 、--(即数值变量加一或减一) ### 3.赋值运算符 、、-、*、/、... ### 4.比较运…...
2月更新 | Visual Studio Code Python
我们很高兴地宣布,2023年2月版 Visual Studio Code Python 和 Jupyter 扩展现已推出!此版本包括以下改进:从激活的终端启动 VS Code 时的自动选择环境 使用命令 Python: Create Environmen 时可选择需求文件或可选依赖项 预发布:改…...
C++回顾(十八)—— 文件操作
18.1 I/O流概念和流类库结构 1 概念 程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。 C输入输出包含以下三个方面的内容: (1)对系统指定的标准设备的输入和输出。即从键盘输入数据&am…...
以java编写员工管理系统(测试过 无问题)
一、系统结果的部分展示 二、题目以及相关要求 三、组成 1.该系统由 Employee 类 、commonEmployee类、Testemd类和managerEmployee类组成 2.Employee实现的代码 public class Employee {private String id;private String name;private String job;private int holiday…...
单例模式之懒汉式
在上篇文章中,我们讲了单例模式中的饿汉式,今天接着来讲懒汉式。 1.懒汉式单例模式的实现 public class LazySingleton {private static LazySingleton instance null;// 让构造函数为private,这样该类就不会被实例化private LazySingleto…...
1638_chdir函数的功能
全部学习汇总:GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 今天看一个半生不熟的小函数,chdir。说半生不熟,是因为这个接口一看就知道是什么功能。然而,这个接口如何用可真就没啥想法了。 …...
使用CEF 获得某头条请求,并生成本地文件的方法
目录 一、获得网站请求响应信息 1、响应过滤 2、匹配过滤URL的函数 3、获得请求响应后的处理...
二十、Django-restframework之视图集和路由器
一、视图集和路由器 REST框架包含了一个处理视图集的抽象,它允许开发人员集中精力建模API的状态和交互,并根据通用约定自动处理URL构造。 视图集类与视图类几乎相同,不同之处在于它们提供的是retrieve或update等操作,而不是get或…...
[深入理解SSD系列 闪存实战2.1.2] SLC、MLC、TLC、QLC、PLC NAND_固态硬盘闪存颗粒类型
闪存最小物理单位是 Cell, 一个Cell 是一个晶体管。 闪存是通过晶体管储存电子来表示信息的。在晶体管上加入了浮动栅贮存电子。数据是0或1取决于在硅底板上形成的浮动栅中是否有电子。有电子为0,无电子为1. SSD 根据闪存颗粒区分,固态硬盘有SLC、MLC、TLC、QLC、PLC 五种类型…...
论文阅读-MGTAB: A Multi-Relational Graph-Based Twitter Account DetectionBenchmark
目录 摘要 1. 引言 2. 相关工作 2.1. 立场检测 2.2.机器人检测 3.数据集预处理 3.1.数据收集和清理 3.2.专家注释 3.3. 质量评估 3.4.特征分析 4. 数据集构建 4.1.特征表示构造 4.2.关系图构建 5. 实验 5.1.实验设置 5.2.基准性能 5.3训练集大小的研究 5.4 社…...
基于libco的c++协程实现(时间轮定时器)
在后端的开发中,定时器有很广泛的应用。 比如: 心跳检测 倒计时 游戏开发的技能冷却 redis的键值的有效期等等,都会使用到定时器。 定时器的实现数据结构选择 红黑树 对于增删查,时间复杂度为O(logn),对于红黑…...
java多线程与线程池-04线程池与AQS
第7章 线程池与AQS java.util.concurrent包中的绝大多数同步工具,如锁(locks)和屏障(barriers)等,都基于AbstractQueuedSynchronizer(简称AQS)构建而成。这个框架提供了一套同步管理的通用机制,如同步状态的原子性管理、线程阻塞与解除阻塞,还有线程排队等。 在JD…...
优化模型验证关键代码25:样本均值近似技术处理两阶段随机旅行商问题及Gurobipy代码验证
大多数数学规划模型都会考虑到研究问题中存在的不确定性,针对这些不确定性,两种常用的处理方法是鲁棒优化和随机规划。这篇论文我们关注后者,也就是两阶段随机旅行商问题;利用套期保值算法计算不同规模TSP的可行解,同时比较了样本均值近似技术的解的情况,并计算了该问题的…...
老爸:“你做的什么游戏测试简直是不务正业!”——我上去就是一顿猛如虎的解释。
经常有人问我:游戏测试到底是干什么呢?是游戏代练?每天玩游戏?装备随便造,怪物随便秒,线上GM指令随便用?可以每天玩玩游戏,不用忙工作,太爽了?有时朋友不理解…...
JVM垃圾回收调优知识点整理
目录 1、JVM内存模型 1.2、堆及垃圾回收 1.3、JVM参数设置经验: 1.4、对象逃逸分析:...
linux安装mysql-8.0.31
1)、下载mysql-8.0.31压缩包两种方式 a.本地下载后上传服务器解压,下载地址:https://downloads.mysql.com/archives/community/ b.服务器使用命令下载,注意:路径在那,就下载到那个位置。 wget https://dev.mysql.com/…...
2023 年会是网络安全的关键年吗?
过去 12 个月对网络安全领域和周围的每个人来说再次充满挑战。和往年不同,感觉很不一样,攻击源源不断。过去,大型漏洞每季度发生一次,但在过去一年中,在某些情况下,我们几乎每周都会处理严重漏洞。 已知利…...
【深度强化学习】(1) DQN 模型解析,附Pytorch完整代码
大家好,今天和各位讲解一下深度强化学习中的基础模型 DQN,配合 OpenAI 的 gym 环境,训练模型完成一个小游戏,完整代码可以从我的 GitHub 中获得: https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Mod…...
wordpress 获取主题路径/站长工具 忘忧草
关注“心仪脑”查看更多脑科学知识的分享。 什么是非实验性研究方法? 非实验性方法(nonexperimental approach)是指不以实验室严密控制(系统操纵自变量)的方式搜集研究资料的研究方法。 许多心理学问题不能采用实验…...
传统的网站开发模式/小程序开发需要多少钱
//2019.08.01下午机器学习算法1——k近邻算法1、k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用。2、kNN机器学习算法具有以下的特点:(1)思想极度…...
网站建设赚钱吗/网站设计与建设
ylbtech-信息安全-攻击-XSS:XSS/CSS 攻击XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包…...
网站主机查询/软文营销平台
1月26日,微软发布了Windows 10 IoT Core 17083 for Insider版本更新,概括如下: 新特性:1. General bug fixes2. Enabled Flash mode in IOTUAP images. 已知的一些问题:1. F5 driver deployment from Visual Studio does not work on IoT Cor…...
pc下载网站模板/优秀软文范例800字
题名:一号黑体。居中。间距:段前1行。测控技术与仪器专业的认识及学习规划——副标题(自拟)副标题:三号黑体。右对齐。学生相关信息:四号黑体系 部: 防灾仪器系专 业: 测控技术与仪器班 级:学 号…...
关于网站建设资金的报告/郑州seo关键词优化公司
考研和高考最大的区别在于:高考你只需要按部就班学习就好了,其他的都不用你操心;考研则不然,想要顺利上岸,除了要把考研的知识点学会吃透,还要分心去掌握考研相关的各种信息,这些信息分散在各个…...