热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

数据库系统实现第六章查询执行

数据库系统实现第六章查询执行:第六章查询执行查询执行也就是操作数据库的算法一次查询的过程:查询--查询编译(第七章)--查询执行(第六章)--数据查询编译预览查询编译可以分为三个步

第六章 查询执行

查询执行也就是操作数据库的算法

一次查询的过程:

查询-->查询编译(第七章)-->查询执行(第六章)-->数据

查询编译预览

查询编译可以分为三个步骤:

a)分析:构造分析树,用来表达查询和它的结构

b)查询重写,分析树被转化为初始查询计划,通常是代数表达式,之后初始的查询计划会被优化为一个时间更小的计划

c)物理计划生成,将查询计划转化成物理的计划,

为了选择更好的查询计划,需要判断

1)查询哪一个代数的等价形式是最有效的

2)对选中形式的每一个操作,所使用的算法选择

3)数据如何从一个操作转向另一个操作,比如流水线的方式还是,主存缓冲区还是通过磁盘。这些选择依赖于关系的大小,统计数据,某些索引的存在以及数据在磁盘上的分步。

关系代数的操作符包括

1)并,交,和差

2)选择

3)投影

4)乘积

5)连接

6)消除重复

7)分组

8)排序

表达式树

对于任何操作,我们可以将几个操作符的应用画成一个表达式树,这些树的叶节点是关系的名字,内部节点为操作符,每个操作符操作的是他的儿子节点。

物理查询计划操作符

物理查询计划由操作符构造,每一个操作符实现计划的一步,物理操作符常是一个关系代数操作符的时间。当然物理操作符有时完成的与关系代数无关,例如,扫描一个表。

扫描表

无力查询计划中最基本的事是读一个关系R的整个内容,例如将R与另一个关系做并连接的时候,这一步是必须的,扫描的方式有两种

1)很多时候,关系R存放在二级存储器中的某些区域,元组排放在块中,一个接一个的扫描块,叫做表-扫描

2)如果关系R种某一属性有索引,可以使用索引来得到R的元组,这种叫索引-扫描

扫描表时的排序

实现排序-扫描的方法有三种

a)如果我们想要按照属性a来排序关系R,并且a上有一个B数索引,或者R是按a排序的,那么对索引扫描即可得到顺序的R

b)如果R可以装进内存,那么可以采用内存排序算法

c)如果R很大不能完全装进内存,那么可以采用外存排序的方式,如两阶段多路归并

数据库系统实现 第六章 查询执行


推荐阅读
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • 本文深入探讨了 Java 编程语言的基础,特别是其跨平台特性和 JVM 的工作原理。通过介绍 Java 的发展历史和生态系统,帮助初学者理解如何编写并运行第一个 Java 程序。 ... [详细]
  • MATLAB实现n条线段交点计算
    本文介绍了一种通过逐对比较线段来求解交点的简单算法。此外,还提到了一种基于排序的方法,但该方法较为复杂,尚未完全理解。文中详细描述了如何根据线段端点求交点,并判断交点是否在线段上。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
  • libsodium 1.0.15 发布:引入重大不兼容更新
    最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ... [详细]
  • 本文总结了涡喷发动机动平衡的几种有效方法,探讨了不同传感器和软件工具的应用,旨在帮助爱好者和工程师更好地理解和实现动平衡调整,确保发动机高效稳定运行。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
author-avatar
tcystars_628
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有