关系查询处理和查询优化

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

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)//重点
选择的分配率:先(并、差、连接)再选择=分别选择再(并、差、连接//重点
相关文章
|
9月前
|
存储 SQL 关系型数据库
大数据量下数据库分页查询优化方案汇总
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。
191 2
|
22天前
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
|
关系型数据库 MySQL 开发者
索引两表优化案例|学习笔记
快速学习索引两表优化案例
86 0
索引两表优化案例|学习笔记
|
SQL 数据库
数据库查询——组合表查询
数据库查询——组合表查询
125 0
|
存储 SQL 缓存
MySql索引分析及查询优化
MySql索引分析及查询优化
166 0
MySql索引分析及查询优化
|
算法 Java 数据库连接
大主子表关联的性能优化方法
一、        原理解释所谓主子表关联计算,就是针对主表的每条记录,按关联字段找到子表中对应的一批记录。以订单(主表)和订单明细(子表)为例,两者以订单ID为关联字段。下图显示了关联计算过程中对主表中一条记录的处理情况,红色箭头代表没找到对应记录(不可关联),绿色箭头代表找到了对应记录(可关联):                                               假设订单(主表)有m条记录,订单明细(子表)有n条记录,在不考虑优化算法时,主表中每一条记录的关联都需要遍历子表,相应的时间复杂度为O(n)。
1352 0
|
SQL 缓存 关系型数据库
「mysql优化专题」单表查询优化的一些小总结,非索引设计(3)
上篇讲解了「mysql优化专题」90%程序员都会忽略的增删改优化(2),相信大家都有所收获。接下来这篇是查询优化。其实,大家都知道,查询部分是远远大于增删改的,所以查询优化会花更多篇幅去讲解。