首页 > 数据库 >【SQL 优化器技术系列】谓词下推和上拉

【SQL 优化器技术系列】谓词下推和上拉

时间:2023-06-15 14:03:52浏览次数:43  
标签:语句 下推 谓词 SQL Oracle 优化


Oracle 2005 年出了一个 30 多页的小册子,《Query Optimization in Oracle Database10g Release 2》,介绍了常见的优化器技术。

我是做 SQL 执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。

一个复杂 query 里可能包含多个视图和子查询(下称语句块),在它们的内部和外面还有很多谓词。

  • 谓词下推是指将外面的谓词条件下推到语句块内部,降低结果集大小、扩大优化空间;
  • 谓词上拉是指把谓词从一个语句块里复制提取出来,然后下压到其它语句块中。

本文是初级介绍文档,不深入探讨谓词下推、上拉的条件,仅聊一下它的意义:

  • 通过把 WHERE 条件传递到各个语句块,能降低各个阶段输出的数据量,使得后继的 join、group by 等操作代价更小;
  • WHERE 条件更多之后,可能会打开更多的访问空间,生成更优的计划


标签:语句,下推,谓词,SQL,Oracle,优化
From: https://blog.51cto.com/u_16162111/6486728

相关文章

  • 【SQL 优化器技术系列】 外连接消除
    Oracle2005年出了一个30多页的小册子,《QueryOptimizationinOracleDatabase10gRelease2》,介绍了常见的优化器技术。我是做SQL执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。外连接消除就是将一个outerjoin转换成innerjoin。......
  • 基于中间件实现MySQL读写分离
    1.场景在数据库读多写少的时候2.读写分离只在主服务器上写,只在从服务器上读。使用amoeba中间件3.部署3.1Dockercompose一键部署Compose文件:version:'3.8'services:mysql_master:image:mysql:8.0.33-oracle......
  • 数据库与Redgate SQL Toolbelt和Azure DevOps的持续集成
    理论与实践中的数据库CICI背后的理论是,如果我们每天多次将代码集成到共享存储库中,然后通过运行自动构建和后续测试来验证每个提交,那么我们会及早发现并根除问题,并提高软件的质量。本文的内容是关于设置管道,使您能够将CI理论付诸实践,用于数据库。当我在2013年发布关于这个主题的原始......
  • 动态魔术使用DBMS_SQL
    动态SQL/PLSQL被认为是OraclePL/SQL中最高级的主题之一。尽管它根本不是一个新主题,但它仍然是消化和掌握最具挑战性的概念之一。动态SQL只是SQL代码的任何部分,在编译之前未明确写入。因此,例如,如果您不知道SQL查询中的“WHERE”谓词,则必须使用动态SQL。Oracle为我们提供了两种......
  • Mybatis中SqlNode的组合模式
    组合( Composite )模式就是把对象组合成树形结构,以表示“部分-整体”的层次结构,用户可以像处理一个简单对象一样来处理一个复杂对象,从而使得调用者无需了解复杂元素的内部结构。组合模式中的角色有:抽象组件(容器):定义了树形结构中所有类的公共行为,例如add(),remove()等方法。树叶:最终......
  • .NET中SQL数据库的GraphQL API
    您可能已经阅读了大量关于GraphQL的文章,并且已经了解了这种API技术的所有优缺点,作为RESTAPI的替代方案。但是,让我们不久回顾一下GraphQL是什么,它的主要目的,以及我们如何在现实生活中使用它。关于GraphQL的简短信息GraphQL于2015年由Facebook发布,定位为着名的RESTful架构风格的替代......
  • windows环境下操作,同一台机器 如何跑两个mysql服务?
    在同一台机器上运行两个MySQL服务是可行的,但需要注意以下几点:确保端口号不冲突。每个MySQL服务都需要监听一个独立的端口,以便客户端可以连接到正确的服务。配置文件的区分。每个MySQL实例需要有自己独立的配置文件,包括数据存储路径、日志文件路径等信息。确保资源......
  • 如何从CLI管理阿里巴巴MySQL数据库
    阿里云提供高度可用的按需MySQL,SQLServer和PostgreSQL数据库,作为其ApsaraDBforRDS  (关系数据库服务)的一部分。RDS易于设置和部署。该服务处理数据库服务器的所有管理任务,包括在发生灾难时进行配置,修补和恢复。除了这个即用型数据库服务,您还可以选择从弹性计算服务(ECS)实例设置......
  • plsq怎么查看oracle最近执行的sql语句
    plsq怎么查看oracle最近执行的sql语句?怎么可以使用如下语句查询 //其中sql_text即为执行的sql语句,sql_exec_start为sql执行开始时间SELECTa.sql_text,a.sql_exec_start,a.*FROMV$SQL_MONITORawherea.service_name='easorcl'ORDERBYSQL_EXEC_STARTDESC;......
  • MySQL中的非确定性函数(即rand)可能会让您感到惊讶
    使用sysbench处理测试用例,我遇到了这个问题:的MySQL>选择*从sbtest1其中ID=ROUND(RAND()*10000,0);+------+--------+-------------------------------------------------------------------------------------------------------------------------+----------------......