美文网首页数据库数据库入门
【数据库】数据库入门(十): 查询优化(Query Optimi

【数据库】数据库入门(十): 查询优化(Query Optimi

作者: Ulrich蚊子 | 来源:发表于2020-01-02 19:12 被阅读0次

查询处理

  1. 用户提交 SQL 查询请求给数据库管理系统
  2. 数据库管理系统处理和执行 SQL 请求,从数据库中获取相应数据并返回。
image

由于 SQL 只是一种声明性的语言,因此 DBMS 需要决定如何执行 SQL 查询语句。

形态 类别
SELECT name FROM Person WHERE age<21; 上层语言(SQL)
π_{name}(σ_{age<21}(Person)) 下层语言(关系代数 RA)
π_{name} \rightarrow σ_{age<21} \rightarrow Person 执行表(查询树)
查询结果

在上述过程中,查询处理过程经历了一下步骤:

  • 查询解析与转换(Parser and translator)
  1. 检查 SQL 查询语法
  2. 验证关系表是否存在(表名、属性、数据类型、权限等)
  3. 转化成关系代数表达式(分解成不同的查询块,再分别转化)
  • 查询优化(Query optimiser)
  1. 转化成可能为最优的执行表(对于同一个 SQL 查询,可能形成不同的执行表)
  2. 在执行表中明确每一个操作符的实现
  • 评价机(Evaluation engine)
  1. 评价查询执行表
  2. 返回结果给用户

查询优化是关系型数据库管理系统中最重要的任务之一。一个好的 DBMS 必须拥有一个好的查询优化器。

查询树与执行表

每一个 RA 表达式都可以用查询树来表示,其中:

  • 叶子节点 - 代表输入的关系表
  • 中间节点 - 代表中间结果
  • 根节点 - 代表最终结果的关系表

而执行表就是在查询树的基础上,在每个节点的位置添加注解,用以说明每个表的访问方法以及每个 RA 运算符的实现方法

  • 物化(Materialized):操作符的中间结果可以保存在临时表中,供下一个操作符处理
  • 流水线(Pipelined):操作符的中间结果直接发送给另一个操作符,而不需要创建临时表(也称为on-the-fly)

查询优化

在实践中,查询优化器包含以下三种优化方法:

  • 语义查询优化:使用应用程序特定的语义知识将查询转换为成本更低的查询
  • 基于规则的查询优化:使用启发式规则将关系代数表达式转换为具有可能更低成本的等价表达式。
  1. 思想:在其他操作之前应用最严格的操作,可以减少中间结果的大小
  2. 下推选择(Push-down selection):尽早应用,减少元组的数量
  3. 下推投影(Push-down projection):尽早应用以减少属性的数量。
  4. 重新排序连接(Re-ordering joins):首先应用限制性连接来减少结果的大小。
  • 基于成本的查询优化:使用成本模型来估计计划的成本,然后选择最具成本效益的计划

一个普遍的查询模式为 连接(join)- 选择(select)- 投影(project)。

相关文章

  • 【数据库】数据库入门(十): 查询优化(Query Optimi

    查询处理 用户提交 SQL 查询请求给数据库管理系统 数据库管理系统处理和执行 SQL 请求,从数据库中获取相应数...

  • Presto源码分析之IterativeOptimizer

    概要 查询优化是数据库系统里面特别关键的一个组件, 曾经有一个老外,我也不知道是谁说过: Query optimi...

  • RBO和CBO详解

    RBO和CBO的基本概念 Oracle数据库中的优化器又叫查询优化器(Query Optimizer)。它是SQL...

  • 数据库-SQL

    引言 SQL(Structured Query Language,结构化查询语言)可以用于数据库创建和数据库查询,...

  • DQL(Data Query Language 数据库查询语言)

    DQL(Data Query Language 数据库查询语言) 简单查询 条件查询 逻辑查询 模糊查询 结果集排...

  • 数据库存储原理特性索引优化

    说一下mysql数据库存储的原理? 事务的特性? 数据库索引 数据库怎么优化查询效率? 数据库优化方案 优化索引、...

  • SQL

    SQL:数据库语言.(Structured Query Language结构化查询语言). 常见的数据库: MyS...

  • MySQL简易教程(学习笔记)

    MySQL数据库:是数据库管理软件MySQL(Structured Query Language):结构化查询语言...

  • SQL第11-14课:查询与联结

    查询(query): 子查询的select语句只能查询单个列。 关系数据库与非关系数据库 sql语句中出现笛卡尔乘...

  • 07_Lucene搜索

    搜索 对要搜索的信息创建Query查询对象,Lucene会根据Query查询对象生成最终的查询语法,类似关系数据库...

网友评论

    本文标题:【数据库】数据库入门(十): 查询优化(Query Optimi

    本文链接:https://www.haomeiwen.com/subject/ipgooctx.html