第九章 关系查询处理和查询优化

news2024/11/23 20:38:49

第九章 关系查询处理和查询优化

9.1 关系数据库系统的查询处理

9.1.1 查询处理步骤

  1. 查询分析

    对查询语句进行扫描、词法分析和语法分析,

    • 词法分析:从查询语句中识别出正确的语言符号。
    • 语法分析:进行语法检查。
  2. 查询检查

    • 合法性检查
    • 视图转换
    • 安全性和完整性初步检查
  3. 查询优化

    查询优化即选择一个高效执行的查询处理策略。

    • 代数优化/逻辑优化
      • 指关系代数表达式的优化,即按照一定的规则,通过对关系代数表达式进行等价变换,改变代数表达式中操作的次序和组合,使查询执行更高效;
    • 物理优化
      • 指存取路径和底层操作算法的选择。
    • 查询优化的选择依据
      • 基于规则
      • 基于代价
      • 基于语义

    Snipaste_2023-08-10_13-19-16

  • 查询执行

9.1.2 实现查询操作的算法示例

  • 选择操作的典型实现
    • 全表扫描方法(Table Scan)
      • 对查询的基本表顺序扫描,逐一检查每个元组是否满足选择条件,把满足条件的元组作为结果输出。该方法适合小表,不适合大表。
      • 假设可以使用的内存为M块,全表扫描的算法思想如下:
        1. 按照物理次序读Student的M块到内存。
        2. 检查内存的每个元组t,如果t满足选择条件,则输出t。
        3. 如果Student 还有其他块未被处理,重复1和2。
    • 索引扫描方法(Index Scan)
      • 适合于选择条件中的属性上有索引(例如B+树索引或Hash索引),通过索引先找到满足条件的元组主码或元组指针,再通过元组指针直接在查询的基本表中找到元组。
  • 连接操作的实现
    • 最耗时的操作
    • 常用算法
      • 嵌套循环算法(nestec 1oop join)
        1. 对外层循环(Student表)中的每一个元组(sc),检索内层循环(SC表)中的每一个元组(sc);
        2. 检查这两个元组在连接属性(Sno)上是否相等;
        3. 如果满足连接条件,则串接后作为结果输出,直到外层循环表中的元组处理完为止。
      • 排序-合并算法(sort-merge join或merge join)
        1. 如果参与连接的表没有排好序,首先对Student表和SC表按连接属性Sno 排序。
        2. 取Student表中第一个Sno,依次扫描SC表中具有相同Sno的元组,把它们连接起来
        3. 当扫描到Sno不相同的第一个SC元组时,返回Student表扫描它的下一个元组,再扫描SC表中具有相同Sno的元组,把它们连接起来
      • 索引连接(index join)算法
        1. 在SC表上已经建立了属性Sno的索引。
        2. 对Student中每一个元组,由Sno值通过SC的索引查找相应的SC元组。
        3. 把这些SC元组和Student元组连接起来。
        4. 循环执行②③,直到Student表中的元组处理完为止。
      • Hash Join算法

9.2 关系数据库系统的查询处理

9.2.1 查询优化概述

总代价 = I / O 代价 + C P U 代价 + 内存代价 + 通信代价 总代价 = I/O代价 + CPU代价+内存代价+通信代价 总代价=I/O代价+CPU代价+内存代价+通信代价

计算查询代价时一般用查询处理读写的块数作为衡量单位。

9.3 代数优化

9.3.1 关系代数表达式等价变换规则

代数优化策略是通过对关系代数表达式的等价变换来提高查询效率。

  • 连接,笛卡儿积的交换律

    • E 1 E_1 E1 E 2 E_2 E2是关系代数表达式,F是连接运算的条件
      • E 1 × E 2 ≡ E 2 × E 1 E_1 \times E_2 \equiv E_2 \times E_1 E1×E2E2×E1
      • E 1 ⋈ E 2 ≡ E 2 ⋈ E 1 E_1 \bowtie E_2 \equiv E_2 \bowtie E_1 E1E2E2E1
      • E 1 ⋈ F E 2 ≡ E 2 ⋈ F E 1 E_1 \underset{F}{\bowtie} E_2 \equiv E_2 \underset{F}{\bowtie} E_1 E1FE2E2FE1
  • 连接,笛卡儿积的结合律

    P281

9.3.2 查询树的启发式优化

典型的启发式规则

  1. 选择运算应尽可能先做。
    • 在优化策略中这是最重要、最基本的一条。它常常可使执行代价节约几个数量级,因为选择运算一般使计算的中间结果大大变小。
  2. 把投影运算和选择运算同时进行。
    • 如有若干投影和选择运算,并且它们都对同一个关系操作,则可以在扫描此关系的同时完成所有这些运算以避免重复扫描关系。
  3. 把投影同其前或后的双目运算结合起来,没有必要为了去掉某些字段而扫描一遍关系。
  4. 把某些选择同在它前面要执行的笛卡儿积结合起来成为一个连接运算,连接(特别是等值连接)运算要比同样关系上的笛卡儿积省很多时间。
  5. 找出公共子表达式。
    • 如果这种重复出现的子表达式的结果不是很大的关系,并且从外存中读入这个关系比计算该子表达式的时间少得多,则先计算一次公共子表达式并把结果写入中间文件是合算的。当查询的是视图时,定义视图的表达式就是公共子表达式的

Snipaste_2023-08-10_16-30-39

9.4 物理优化

物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划,达到查询优化的目标。选择的方法可以是:

  1. 基于规则的启发式优化。
    • 启发式规则是指那些在大多数情况下都适用,但不是在每种情况下都是最好的规则。
  2. 基于代价估算的优化。
    • 使用优化器估算不同执行策略的代价,并选出具有最小代价的执行计划。
  3. 两者结合的优化方法。
    • 查询优化器通常会把这两种技术结合在一起使用。因为可能的执行策略很多,要穷尽所有的策略进行代价估算往往是不可行的,会造成查询优化本身付出的代价大于获得的益处。为此,常常先使用启发式规则,选取若干较优的候选方案,减少代价估算的工作量;然后分别计算这些候选方案的执行代价,较快地选出最终的优化方案。

9.4.1 基于启发式规则的存取路径选择优化

P284

9.4.2 基于代价估算的优化

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

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

相关文章

【java】【SpringBoot】【二】运维实用篇 SpringBoot工程

目录 一、打包与运行 1、程序打包与运行(Window版) 1.1 打包 1.2 运行 1.3 打包插件 1.4 总结 1.6 命令行启动常见问题及解决方案 2、程序运行(Linux版) 二、配置高级 1、临时属性设置 2、配置文件分类 3、自定义配置…

Spring Boot + Vue3前后端分离实战wiki知识库系统十三--单点登录开发二

接着https://www.cnblogs.com/webor2006/p/17608839.html继续往下。 登录功能开发: 接下来则来开发用户的登录功能,先准备后端的接口。 后端增加登录接口: 1、UserLoginReq: 先来准备用户登录的请求实体: package com…

07JVM_内存模型和CAS与原子类

一、内存模型 1.java内存模型 Java内存结构是JMM(Java Memory Model)的意思。JMM定义了一套在多线程读写共享数据(成员变量,数组)时,对数据的原子性,见性,有序性的规则和保障。 1…

浅谈电力电容器技术的发展及选型

安科瑞 华楠 摘要:介绍了我国电力电容器产品制造技术的发展现状。在与国外电力电容器产品先进水平对比的基础上,讨论了我国电力电容器产品的差距和某些对策,并对我国电力电容器技术发展趋势提出了一些看法。 关键词:电力电容器;制造技术;技术发展 0 引…

每日一题~最大二叉树

题目链接:654. 最大二叉树 - 力扣(LeetCode) 题目描述: 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数…

Logstash介绍

Logstash介绍 Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。 集中、转换和存储你的数据 Logstash是一个开源的服务器端数据处理管道,可以同时从多…

采集分析仪设计原理图:437-带触摸显示的10路5Msps@18bit采集分析仪

带触摸显示的10路5Msps18bit采集分析仪 一、产品概述 本产品提供了多种传感器接入接口,支持多种类型传感器实时采集、处理、显示等功能。主处理器采用XC7Z100-FFG900芯片,具有444K逻辑单元和双核ARM Cortex-A9 MPCore处理器。PL部分得可编程逻辑可…

docker系列-报错以及解决指南

1. windows运行docker报错Windows Hypervisor is not presentDocker Desktop is unable to detect a Hypervisor.Hardware assisted virtualization and data execution protection must be enabled in the BIOS. Docker Desktop - Windows Hypervisor is not presentDocker D…

async和await的用法

定义 async的定义 在mdn中,async的定义为: async function 关键字可用于定义表达式中的异步函数。 其实很简单,就是async关键字后面定义的函数会被转化为一个异步的函数 如下所示: function fn1(){return 同步}async function asyncFn(){return 异步}console.log(fn1())con…

Dubbo3应用开发——架构的演变过程

Dubbo3应用开发——架构的演变过程 什么是Dubbo 早期Dubbo的定位; 基于Java的高性能,轻量级的RPC框架;SOA【Service-Oriented Architecture ⾯向服务的架构】 RPC服务治理; 2018年阿⾥巴巴把这个框架捐献给了 Apache 基⾦会&am…

深入理解Java单例模式和优化多线程任务处理

目录 饿汉模式懒汉模式单线程版多线程版双重检查锁定 阻塞队列 单例模式能保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例,并提供一个全局访问点。 饿汉模式 类加载的同时,创建实例。 class Singleton {private static final Singlet…

2023:生成式AI与存储最新发展和趋势分析(上)

生成式AI的热潮在短时间内席卷全球,以一种势不可挡的趋势迅速出圈,在某一时间段,似乎出现了“除了IT行业,人人都是AI专家”的盛况。这一轮如火如荼的全民AI热潮迸发至今,业已过半载,待最初的烟花绚烂散去&a…

【基础篇】六、基于SpringBoot来整合SSM的案例(下)

文章目录 1、前后端调用:axios发送异步请求2、添加功能3、删除功能4、修改功能5、异常消息处理6、分页功能7、分页Bug处理8、条件查询 接下来加入前端页面,使用axios发送异步请求调用上篇的接口。调前端代码时,发现还挺有趣,刷新、…

Learn Prompt-ChatGPT 精选案例:广告文案

ChatGPT 可以帮助我们生成广告文案和宣传图片,这对营销品牌建设很有帮助。通常,一个产品会有一个主要的广告词,传达设计理念或宣传产品的好处。我们可以尝试直接生成文案,看看 ChatGPT 有没有好的创意。假设我们的产品是一款登山鞋…

【css | linear-gradient】linear-gradient()的用法

linear-gradient() CSS函数创建一个由两种或多种颜色沿一条直线进行线性过渡的图像,其结果是<gradient>数据类型的对象,此对象是一种特殊的<image> 数据类型。 先看一个线上的示例 https://code.juejin.cn/pen/7277486410842996771 语法 /* 渐变轴为 45 度&…

Docker容器详解

值得看的原文地址

一根USB线,全新单片机开发体验!推荐WeCanStudio工具套件

我的需求 回想当初大学时代,学习单片机的开发最繁琐的事情就是,通过串口升级STC的MCU来调试编写的固件。不知到有多少个深夜都在重复以下步骤&#xff1a; Keil编译代码打开STC软件,选择对生成的新固件程序手动断电、上电MCU板子(USB转串口的驱动还经常让电脑蓝屏&#x1f6…

极智开发 | 制作u盘启动盘的几种方式

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 制作u盘启动盘的几种方式。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 在平时的工作、生活中,经常会涉及…

Bigemap在市政工程设计给排水行业的应用场景?

去年单位采购的&#xff0c;今年11月份才分配给我使用。 使用场景&#xff1a; 现场定位&#xff1a; 通过我们电脑导入cad图纸数据&#xff0c;根据需求可以画一些简单的示意路线&#xff0c;发送到手机进行现场比对&#xff0c;最后会在cad里面加入管道设计方案。 去年单位采…

Windows Server 2012 R2系统远程桌面的数字证书算法SHA1升级到SHA256

问题描述&#xff1a; 最近项目进行密评的时候&#xff0c;Windows Server 2012 R2发现了以下证书问题&#xff1a; Windows Server 2012 R2系统远程桌面的TLS 1.2协议使用SHA1算法数字证书&#xff0c;且证书有效日期截止23年10月&#xff0c;建议注意证书到期时间&#xff…