数据库原理-关系数据库查询和优化

关系数据库查询处理步骤

查询处理的四个步骤:

  1. 查询分析
  2. 查询检查
  3. 查询优化
  4. 查询执行

1.查询分析

分析时主要进行词法和语法分析。

首先对整条sql语句进行扫描,根据数据库数据字典中的数据标记,识别出sql的关键字、关系名和属性名等词组,检查是否存在词法错误。完成后检查语句排列是否符合语法规则,如果符合的话进入下一环节,否则直接报错。

2.查询检查

检查主要包括语义检查和完整性检查。

sql的基本分析流程和编译器的分析流程是相似的,只不过多加了sql特殊的检查。

语义分析时,根据数据字典定义的数据库对象名、关系名、属性名和视图、过程和函数等数据库建造者自定义的名称检查词法分析中的“词”,检验词是否存在和有效。同时,对于视图操作,需要将对视图的操作转换为对基本表的操作。

完整性检查主要是检查用户的权限能力,如果用户没有权限或是权限不够就拒绝执行语句。

查询检查之后sql语句将转换为对应的关系代数表达式。

实例:

检索学习课程号为C2的学生学号与成绩

sql语句:

SELECT SNO,GRADE
  FROM SC
WHERE CNO=‘C2‘ 

关系代数表达式:

π SNO, GRADE (σ CNO=‘C2‘ (SC)) 

3.查询优化

每个查询都会有执行策略和操作算法,查询优化就是根据数据库和sql语句选择最好的查询方式。一般的查询优化有两种:代数优化和物理优化。

4.查询执行

优化器根据优化策略生成查询执行计划,代码生成器将执行计划编译和执行,并返回结果。

整个过程的流程图如下:


关系数据库优化的方式

  1. 代数优化
  2. 物理优化

代数优化

sql语句执行完查询检查后得到查询树,也就是关系代数表达式,代数优化就是等价变换关系代数表达式,以此来提高查询效率。

代数优化的原则

  1. 先做选择和投影
  2. 预处理连接操作
  3. 投影结合双目运算
  4. 选择结合笛卡尔乘积
  5. 找出公共子表达式

1.先做选择和投影

在进行sql语句查询的时候必须先做选择操作,确定操作对象,如果sql语句中同时还有投影操作也一起进行,投影操作其实也可以看做是一种选择操作,为了避免重复扫描sql语句,投影和选择同时进行。

2.预处理连接操作

连接操作是非常大的消耗,为了加快连接操作,可以对数据建立索引或排序。

3.投影结合双目运算

投影操作结合之前或之后的双目元素,没有必要为了去掉某些字段二扫描一遍关系。

单目运算时对一个关系施加的运算。双目运算是对两个关系时间的运算。

选择、投影是单目运算符,连接和笛卡尔乘积是双目运算符。

4.选择结合笛卡尔运算

把选择操作结合笛卡尔运算形成连接运算,连接运算(特别是等值连接)比笛卡尔乘积要省很多时间。

5.找出公共子表达式

就是先计算大家都会用到表达式结果,减少重复计算。

第3和4条说白了就是将单目运算想尽办法结合双目运算,单目运算有选择和投影,选择是根据条件选择符合条件的选项,投影是筛选数据的属性。投影可以结合连接或笛卡尔乘积,先将两张表合成一张表在筛选属性。选择只需要结合笛卡尔乘积,因为连接本来就是选择后的结果,不需要在选择了。

关系代数优化步骤

  1. 构造查询树
  2. 规则变换查询树

1.构造查询树

将sql语句中的关键字变换成关系代数运算符,以下是对应关系:

where-选择运算-σ

select-投影运算-∏

from-笛卡尔乘积-χ

然后构造树形结构,叶子节点表示关系,内部节点代数操作。自底向上进行查询操作。



物理优化

代数优化仅仅是改变查询语句中的操作的次序和组合,不涉及底层的存取路径,应对小的数据库还可以,但是对于大型数据库还需要数据存取优化,所以就发展了物理优化,选择高效合理的操作算法和存取路径。

物理优化的三种优化算法:

  1. 基于规则的启发式优化
  2. 基于代价估算的优化
  3. 两者结合的优化

1.基于规则的启发式操作

  • 选择操作启发规则
  • 连接操作的启发式规则

选择操作的启发式规则:

对于小关系,使用全表顺序扫描,即使选择列上有索引 
对于大关系,启发式规则有:

  • 对于选择条件是主码=值的查询

查询结果最多是一个元组,可以选择主码索引 
一般的RDBMS会自动建立主码索引。

  • 对于选择条件是非主属性=值的查询,并且选择列上有索引

要估算查询结果的元组数目,如果比例较小(<10%)可以使用索引扫描方法 
否则还是使用全表顺序扫描

  • 对于选择条件是属性上的非等值查询或者范围查询,并且选择列上有索引

要估算查询结果的元组数目,如果比例较小(<10%)可以使用索引扫描方法 
否则还是使用全表顺序扫描

  • 对于用AND连接的合取选择条件

如果有涉及这些属性的组合索引,优先采用组合索引扫描方法 
如果某些属性上有一般的索引,则可以前四种扫描方法 
否则使用全表顺序扫描。

  • 对于用OR连接的析取选择条件

一般使用全表顺序扫描

基于启发的优化方法实现简单并且优化代价较小,适合解释执行的系统。(关于解释执行和编译执行和编译器的链接:http://lavasoft.blog.51cto.com/62575/187229)

但是对于编译执行的系统则不适用。

基于代价估算的优化

基于代价的优化方法要计算各种操作算法的执行代价,与数据库的状态密切相关。

数据字典中存储的优化器需要的统计信息: 
1. 对每个基本表:
该表的元组总数(N) 
元组长度(l) 
占用的块数(B) 
占用的溢出块数(BO)

2.每个表的基本列

   

该列不同值的个数(m)

选择率(f) 
如果不同值的分布是均匀的,f=1/m 
如果不同值的分布不均匀,则每个值的选择率=具有该值的元组数/N 
该列最大值 
该列最小值 
该列上是否已经建立了索引 
索引类型(B+树索引、Hash索引、聚集索引) 
3. 对索引(如B+树索引) 
索引的层数(L) 
不同索引值的个数 
索引的选择基数S(有S个元组具有某个索引值) 
索引的叶结点数(Y)

时间: 2024-11-02 20:27:05

数据库原理-关系数据库查询和优化的相关文章

重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化

重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化 一:Mysql原理与慢查询 MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如"精通MySQL"."SQL语句优化"."了解数据库原理"等要求.我们知道一般的应用系统,读写比例在10:1左右,而且插入

数据库面试系列之三:慢查询以及慢查询的优化

什么是慢查询? 查询的执行时间大于mysql系统设置的指定时间(long_query_time)的话,该查询就叫做慢查询,会被记录到慢查询日志文件里面. 记录慢查询日志的设置是关闭,需要开启之后才可以记录慢查询 set global slow_query_log=ON; 分析慢查询需要用explain+mysql,请参考下面的blog: http://www.cnitblog.com/aliyiyi08/archive/2008/09/09/48878.html 慢查询的优化: 1.where条

《数据库原理》复习总结

<数据库原理>复习总结 数据库技术就是主要研究如何科学的组织和存储数据,高效的获取和处理数据,并可以满足用户各种不同的信息需求的技术,因为对数据库技术的需求非常大,所以学习这门课的知识和技术是非常必要的,应熟练弄清,掌握数据,数据管理,数据库,数据模型和概念模型的等专业术语的内涵. 第1章 绪论 1.掌握数据库.数据库管理系统.数据库系统(组成)的概念 2.了解数据库技术发展的三个阶段 3.掌握三级模式及二级映像的概念 4.理解数据库管理系统的主要功能 知识点: 数据:数据库系统研究和处理的对

数据库原理相关知识

数据库原理相关知识 made by @杨领well([email protected]) 一.基础知识 1. 简述数据库系统的特点. 数据结构化 : 这是数据库系统与文件系统的本质区别. 数据的共享性高.冗余度低且易扩充 : 数据共享可以大大减少数据冗余, 节约存储空间.数据共享还能够避免数据之间的不相容性和不一致性. 数据的独立性高 : 数据独立性包括物理独立性和逻辑独立性. 数据由数据库管理系统统一管理和控制 : 数据的安全性保护(保护数据以防止不合法使用造成的数据泄密和破坏).数据的完整性

数据库原理分析(强烈推荐)

转自:https://blog.csdn.net/ptsx0607/article/details/68941750 一提到关系型数据库,我禁不住想:有些东西被忽视了.关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Teradata .但很少有文章讲解数据库是如何工作的.你可以自己谷歌/百度一下『关系型数据库原理』,看看结果多么的稀少[译者注:百度为您找到相关结果约1,850,000个-] ,而且找到的那些文章都很短.现在如果你查找最近时髦的技术(大数据.NoSQL或J

mysql数据库的安装以及常见优化设置

原文:mysql数据库的安装以及常见优化设置 本文根据优才网课程整理,面向web开发者,内容以实用为主,专业DBA可以绕行. 如果你在大公司,可能有专门的DBA来做这些事情,如果你在一个小公司当架构师或者技术总监,或者你自己创业,那DBA的活你也得干了.咱们来讲一下基本的mysql安装和优化. 一: MYSQL安装和基本配置 在linux上安装,可以用包管理工具来安装,比较简单:RedHat 系列:yum -y install mysql mysql-server Debian系列:sudo a

《数据库原理与应用》复习试题归纳

  <数据库原理与应用>复习试题归纳 一.单项选择题(每小题1分,共20分) 1.数据库的三个模式中,真正存储数据的是( )A.内模式  B.模式  C.外模式  D.三者皆存储数据 2.在数据库的三个模式中(  ) A.内模式只有一个,而模式和外模式可以有多个 B.模式只有一个,而内模式和外模式可以有多个 C.模式和内模式只有一个,而外模式可以有多个 D.均只有一个 3.关于模式,下列说法中错误的是(   ) A.数据库的全局逻辑结构描述   B.数据库的框架 C.一组模式的集合      

MySQL数据库原理

我们知道,数据是信息的载体——一种我们约定了如何解释的符号.在计算机系统中,最常见的应该是文本数据.我们用它记录配置信息,写日志,等等.而在应用程序中,按一定的数据结构来组织数据的方式叫做数据库管理系统(DBMS).数据库就是把数据按照一定的规则,有效的组织存放,以提供更高效.更便捷的数据访问和处理.要理解数据库原理,并使用数据库,需要理解三点内容:1>数据库的数据组织的方式:2>数据库的逻辑架构及物理实现:3>数据库客户端的操作方法.也许,对于使用数据库来说,只需要掌握最后一点,即操作

Mysql数据库调优和性能优化

1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开源数据库,但是mysql数据库的默认设置性能非常的差,仅仅是一个玩具数据库.因此在产品中使用MySQL数据库必须进行必要的优化. 优化是一个复杂的任务,本文描述MySQL相关的数据库设计和查询优化,服务器端优化,存储引擎优化. 2. 数据库设计和查询优化 在MySQL Server性能调优中,首先要考虑的就是Database Schema设计,和