【数据库下】 第四章 查询处理(查询优化)

第四章 查询处理(查询优化)

学习目标
查询优化的目的
查询优化的步骤
一、概述

关系数据库系统的查询优化

  • 查询优化在关系数据库系统中有着非常重要的地位。
  • 关系查询优化是影响RDBMS性能的关键因素。
  • 由于关系表达式的语义级别很高,RDBMS可以从关系表达式中分析查询语义,为执行查询优化提供了可能。

查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化”做得更好 :
1)查询优化器可以从数据字典中获取许多统计信息,而用户程序则难以获得这些信息;
2)如果数据库的物理统计信息改变了,系统可以自动对查询重新优化以选择相适应的执行计划。在非关系数据库系统中必须重写程序,而重写程序在实际应用中往往是不太可能的;

3)查询优化器可以考虑数百种不同的执行计划,程序员一般只能考虑有限的几种可能性;
4)查询优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握。
系统的自动优化相当于使得所有人都拥有这些优化技术。

RDBMS通过某种代价模型计算出各种查询执行策略的执行代价,然后选取代价最小的执行方案。

集中式数据库

​ 执行开销主要包括:

​ 磁盘存取块数(I/O代价)

​ 处理机时间(CPU代价)

​ 查询的内存开销
I/O代价是最主要的

分布式数据库

​ 总代价=I/O代价+CPU代价+内存代价+通信代价

查询优化的总目标:

  • 选择有效的策略
  • 求出给定关系表达式的值
  • 使得查询代价最小(实际上是较小)

查询优化步骤

  1. 将查询转换成某种内部表示,通常是语法树;
  2. 根据一定的等价变换规则把语法树转换成标准(优化)形式;
  3. 选择低层的操作算法:
    对于语法树中的每一个操作:
    计算各种执行算法的执行代价
    选择代价小的执行算法
  4. 生成查询计划(查询执行方案):
    查询计划是由一系列内部操作组成的。
  [例1] 查询选修了2号课程的学生姓名,用SQL表达:
        SELECT  Student.Sname
	      FROM  Student,SC
	      WHERE  Student.Sno=SC.Sno AND SC.Cno=‘2’; 

假定学生-课程SC中有1000个学生记录,10000个选课记录
其中选修2号课程的选课记录为50个 
image-20210924104632393 image-20210924104747134 image-20210924104818780 image-20210924104838019 image-20210924104915170 image-20210924104948061

查询优化任务及过程

1)查询优化的基本过程? 
讨论1.查询优化涉及哪些方面,大致过程?
image-20210924105251453

优化的查询树&执行计划

3) DBMS生成最终执行计划的内涵?
image-20210924105448811

二、关系表达式的转换

1.用于表达式转换的等价规则
1)什么是等价规则,常用的有哪些? 
讨论2.关系表达式进行等价转换的依据是什么?

image-20210924105617860

image-20210924105647054 image-20210924105744713
等价规则(1)
等价规则有哪些,规则的用途? 
image-20210924110023938 image-20210924110045056 image-20210924110112108 image-20210924110211275 image-20210924110253815
2.等价规则的图示化
image-20210924110346768

三 查询树的基本优化策略

1.“选择下移”优化策略
1)“选择下移”有何优化效果?
讨论3.如何利用等价规则进行关系表达式的转换?
image-20210924110537174

“选择下移”查询树优化过程

image-20210924110559960
2.“投影下移”优化策略
image-20210924110700641

“投影下移”查询树优化过程

image-20210924110737253
3.“选择连接顺序”优化策略
image-20210924110858495

“选择连接顺序”查询树优化过程

image-20210924110925347

例子

查询:“张三”老师所在学院的预算和地址。

image-20210924111036076
4.执行计划
4)什么是“执行计划”,如何形成?
image-20210924111125734
总结
基本知识:
查询优化的步骤
关系代数优化的方法
扩展学习:
查询优化器如何进行设计?
posted @ 2021-09-24 11:14  Clancy_gang  阅读(824)  评论(0编辑  收藏  举报