美文网首页
查询优化

查询优化

作者: 娇娇_5038 | 来源:发表于2025-03-18 14:49 被阅读0次
  1. 查询优化概述
    RDBMS查询处理步骤:
  • 查询分析: 对查询语句进行扫描、词法分析和语法分析

  • 查询检测:查询数据库对象、用户权限、完整性约束等

  • 查询优化:高效执行的查询处理策略,查询优化器

  • 查询执行:执行代码生成器,生成执行查询计划的代码


  • 关系查询优化是影响RDBMS性能的关键因素

  • 查询优化利用优化器完成。其优点是不仅用户不必考虑如何最好地表达查询以获得较好地效率,而且在于系统可以比用户程序地“优化”做得更好

  • 优化器可以从数据字典获取许多统计信息
  • 如果数据库的物理统计信息改变了,优化器可以自动对查询重新优化已选择相适应的执行计划
  • 优化器可以考虑数百种不同的执行计划
  • 优化器包括了很多复杂的优化技术
  • RDBMS 通过某种代价模型计算出各种查询执行策略的执行代价,然后选取代价最小的执行方案
  • 集中式数据库
    总代价=I/O代价+CPU代价+内存代价
  • 分布式数据库
    总代价=I/O代价+CPU待机+内存代价+通信代价
    查询优化的总目标:选择有效的策略、求得给定关系表达式的值、使得查询代价最小(实际上是较小)
  1. 查询优化实例
    eg:求学修了2号课程的学生姓名。用SQL表达:
    SELECT Student.Sname FROM Student,SC WHERE Student.Sno = SC.Sno AND SC.Cno='2'

系统可以用多种等价的关系代数表达式来完成这一查询


  1. 计算广义笛卡尔积
  • Q1的算法 把Student和SC的每个元组连接起来的做法
  • 把内存中尽可能地多装入Student表地若干块,留出一块存放另一个表(如SC表)地元组
  • SC中地每个元组和Student中每个元组连接,连接后地元组装满一块后就写到中间文件上
  • 从SC中读入一块和内存中的Student元组连接,知道SC表处理完
  • 再读入若干个Student元组,读入一块SC元组
  • 重复上述处理过程中,直到把Student表处理完
  • 设一个块能装10个Student元组或100个SC元组,把内存中存放5块Student元组和1块SC元组,则读取总块数为
    1000/10+(1000/(105))(10000/100)
  • 其中,读Student表100块。读SC表20遍,每遍100块。若每秒读20块,则总计要花105s
  1. 作选择操作
  • 依次读入连接后的元组,按照选择条件选择满足要求的记录
  • 假定内存处理时间忽略。读取中间文件花费的时间(同写中间文件一样)需要
  • 满足条件的元组假设仅50个,均可存放在内存
  1. 作投影操作
  • 把第二步的结果在Sname上作投影输出,得到最终结果


  • 先对SC表作选择运算,只需读一遍SC表,存取100块花费时间为5s,因为满足条件的元组仅50个,不必使用中间文件
  • 读取Student表,把读入的Student元组和内存中的SC元组作连接。也只需读一遍Student表共100块,花费时间为5s
  • 把连接结果投影输出
    第二种情况总的执行时间约等于5+5约等于10s
  1. 代数优化
  • 代数优化策略: 通过对关系代数表达式的等价变换来提高查询效率
  • 两个关系表达式E1和E2是等价的,可记为

    关系代数表达式等价变换规则请查看教材

查询树的启发优化

  • 典型的启发式规则:
  • 选择运算应尽可能先做。在优化策略中这是最重要、最基本的一条
  • 把投影运算和选择运算同时进行。避免重复扫描关系。
  • 把投影同其他或其后的双目运算结合起来
  • 把某些选择同在它前面执行的笛卡尔积结合起来成为一个连接运算
  • 找出公共子表达式: 如果重复出现的子表达式的结果不是很大的关系并且从外存中读入这个关系比计算该子表达式的时间少得多,则先计算一次公共子表达式并把结果写入中间文件是合算


相关文章

  • MySQL性能调优

    MYSQL查询语句优化 mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬...

  • mysql优化

    MYSQL优化 为查询缓存优化你的查询 EXPLAIN你的SELECT查询。根据结果给出分析相应的查询优化 当只要...

  • 《高性能Mysql》-查询优化

    优化性能需要查询优化、索引优化、库表结构优化这三辆马车齐头并进。这篇文章主要围绕查询优化,要对查询进行优化首先需要...

  • Day2:MySQL慢查询基础-查询慢原因

    说在前面: 查询优化、索引优化、库表结构优化是查询性能优化的三驾马车。 完成一个完整的查询生命周期,查询需要在...

  • MySQL(五)|《千万级大数据查询优化》第二篇:查询性能优化(

    MySQL优化一般是需要索引优化、查询优化、库表结构优化三驾马车齐头并进。本章节开始讲查询优化。 一、为什么查询速...

  • PostgreSQL 源码解读(29)- 查询语句#14(查询优

    本节简单介绍了PG查询逻辑优化中的子查询(subQuery)上拉优化,包括查询优化中子查询的基本概念,同时介绍了主...

  • [es]ES数据查询调优2

    查询语句优化 查询语句优化的内容包括:查询范围,单次查询数量等。 根据实际业务需求去规划查询范围,查询越少的字段越...

  • MySQL | 使用 limit 优化查询和防止SQL被优化

    使用 limit 优化查询和防止SQL被优化 Table of Contents 查询优化 1.1 最大值和最小值...

  • MySQL 数据库优化方法一览

    软优化 查询语句优化 使用索引 优化子查询 分解表 使用中间表 增加冗余字段 分析表、检查表、优化表 硬优化 硬件...

  • mysql调优

    一 、查询优化、索引优化、库表结构优化 1. 查询性能优化 1.1) 优化数据访问:1、是否向数据库请求了不需要的...

网友评论

      本文标题:查询优化

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