关系查询处理和查询优化

简介: 关系查询处理和查询优化

1.关系查询处理


为什么要有查询处理这个步骤?

其目的是把我们的查询语句转化为高效的执行计划。

其有四个阶段:

查询分析:分析语句是否有问题

查询检查:分析语义是否有问题

查询优化:主要有物理优化和代数优化,挺高效率的关键

查询执行:顾名思义

下面介绍一些实现查询操作的算法思想,再着重介绍查询优化,特别是代数优化。


1.1连接操作的实现。


扫描全表法: 逐一检查每个元组是否满是选择条件

索引扫描法: 若选择条件中有索引,先通过索引找到符合条件元组指针,再通过元组指针检索到结果。

一般来说前一种方法大表效率低,后者效率高。


1.2连接操作的实现


以两表为列,可以拓展到多表

嵌套循环法: 对外层循环每一个元组,检查内层循环每一个元组是否符合连接条件

排序—合并法: 对两表连接属性排序和,有点类似于两个链表的连接合并过程进行查找并连接

索引连接法: 对一表连接属性创建索引,对另一表的每个连接属性通过索引查找是否符合连接条件并连接。

Hash Join 方法: 用连接属性做哈希码,用同一个哈希函数散列后连接。


2.查询优化


查询优化分物理优化和代数优化,这里主要介绍代数优化,物理优化不谈。

代数优化是利用关系代数等价变换规则的优化方法,首先得明确自己的优化方向:

一般来说差、并、笛卡尔积、连接是二目运算,比较复杂,投影、选择较简单。所以:

a.选择运算先行,投影先行

b.选择投影串联一般要合并成单个选择或单个投影或一个选择后跟一个投影

明白上面两个大方向后,其实自己要记忆的式子就少了许多,大方向就是转为投影或者转为选择。

由于符号问题转换成中文描述:

转为投影:


投影的串接定理:应用一般,可以自主思考

投影与笛卡尔积的分配率:以A、B分别代表E1,E2的属性列:

投影A,B(E1XE2)=投影A(E1)X投影B(E2)                //**重点**

投影与并的分配率:先并再投=先投再并     //**重点**


转为选择:

选择与笛卡尔积的交换律:若F为E1中的属性,则:
                                   选择F(E1XE2)=选择F(E1)XE2
                                   若F=F1和F2
                                   且F1只属于E1,F2只属于E2,则:
                                   选择F(E1XE2)=选择F1(E1)X选择F2(E2)
                                   若F=F1和F2
                                   且F1只属于E1,F2属于E1、E2,则:
                                   选择F(E1XE2)=选择F2(选择F1(E1)XE2)//重点
选择串接定理:选择F1(选择F2(E))=选择F2(选择F1(E))=选择F1和F2(E)//重点
选择的分配率:先(并、差、连接)再选择=分别选择再(并、差、连接//重点
相关文章
|
传感器 编解码 人工智能
中科星图——MCD43A4 V6天底双向反射率分布函数调整反射率(NBAR)数据集
中科星图——MCD43A4 V6天底双向反射率分布函数调整反射率(NBAR)数据集
389 8
微信小程序数据绑定与事件处理:打造动态交互体验
在上一篇中,我们学习了搭建微信小程序开发环境并创建“Hello World”页面。本文深入探讨数据绑定和事件处理机制,通过具体案例帮助你打造更具交互性的小程序。数据绑定使用双花括号`{{}}`语法,实现页面与逻辑层数据的动态关联;事件处理则通过`bind`或`catch`前缀响应用户操作。最后,通过一个简单的计数器案例,巩固所学知识。掌握这些核心技能,将助你开发更复杂的小程序。
|
SQL 缓存 API
在API接口数据获取过程中,如何确保数据的安全性和隐私性?
在API接口数据获取过程中,确保数据的安全性和隐私性至关重要。本文介绍了身份认证与授权、防止SQL注入和XSS攻击、加密传输、API版本控制、限流与熔断、压力测试与性能优化、备份与恢复以及法律和伦理考量等关键措施,帮助开发者和管理者有效保护API接口的数据安全和隐私性。
|
安全 区块链 数据安全/隐私保护
介绍一下PoW机制的优缺点
介绍一下PoW机制的优缺点
|
SQL 安全 前端开发
软件测试指南:从策略到实践
【8月更文第21天】软件测试是为了评估软件的质量并验证其是否符合预期的功能要求而进行的一系列活动。本文将详细介绍软件测试的不同阶段、测试类型、测试策略与计划的制定、以及如何有效地管理与跟踪发现的缺陷。
948 1
|
机器学习/深度学习 自然语言处理 自动驾驶
深度学习应用领域有哪些?
深度学习在各种领域中都有广泛的应用,它的强大特性使其能够处理大量复杂的数据并进行高级的模式识别,从而改进了各种任务的性能和效率。
1630 3
|
存储 关系型数据库 数据库
关系型数据库结构化数据存储
【5月更文挑战第10天】
549 7
|
小程序 JavaScript 开发工具
微信小程序开发工具的使用,各个配置文件详解,小程序开发快速入门(一)
微信小程序开发工具的使用,各个配置文件详解,小程序开发快速入门(一)
1091 1
|
关系型数据库 MySQL
MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法
MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法
809 0
|
消息中间件 前端开发 算法
【十七】RabbitMQ基础篇(延迟队列和死信队列实战)
【十七】RabbitMQ基础篇(延迟队列和死信队列实战)
314 1

热门文章

最新文章