关系查询处理和查询优化

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

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)//重点
选择的分配率:先(并、差、连接)再选择=分别选择再(并、差、连接//重点
相关文章
|
10月前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费习惯预测的深度学习模型
使用Python实现智能食品消费习惯预测的深度学习模型
323 19
|
6月前
|
数据采集 机器学习/深度学习 数据挖掘
Python爬虫生成CSV文件的完整流程
Python爬虫生成CSV文件的完整流程
|
7月前
|
数据采集 存储 SQL
从零开始搭建大数据平台:屌丝逆袭指南
从零开始搭建大数据平台:屌丝逆袭指南
608 1
|
消息中间件 Java Kafka
Kafka【环境搭建 01】kafka_2.12-2.6.0 单机版安装+参数配置及说明+添加到service服务+开机启动配置+验证+chkconfig配置说明(一篇入门kafka)
【2月更文挑战第19天】Kafka【环境搭建 01】kafka_2.12-2.6.0 单机版安装+参数配置及说明+添加到service服务+开机启动配置+验证+chkconfig配置说明(一篇入门kafka)
1044 1
|
11月前
|
存储 Linux Android开发
开源!时间管理大师必备工具
【10月更文挑战第13天】
679 3
|
12月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第6天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django功能全面,适合快速开发;Flask灵活轻量,易于上手;Pyramid介于两者之间,兼顾灵活性和可扩展性。文章分析了各框架的优缺点,帮助开发者根据项目需求和个人偏好做出合适的选择。
252 4
|
11月前
|
机器学习/深度学习 自动驾驶 算法
深度学习在自动驾驶汽车中的应用
深度学习在自动驾驶汽车中的应用
|
数据采集 存储 XML
Python 爬虫实战:从入门到精通
【8月更文挑战第28天】本文将带你进入Python爬虫的世界,从基础概念到实战操作,一步步教你如何用Python编写一个高效的网络爬虫。你将学习到如何解析网页、提取数据、存储数据以及应对反爬策略等技能。无论你是初学者还是有一定经验的开发者,都能在这篇文章中找到有价值的信息和技巧。让我们一起探索Python爬虫的奥秘吧!
|
存储 Java Maven
win自定义配置本地maven仓库位置,修改maven仓库位置
win自定义配置本地maven仓库位置,修改maven仓库位置
828 0
win自定义配置本地maven仓库位置,修改maven仓库位置
|
关系型数据库 MySQL
MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法
MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法
601 0