【数据库】优化器(optimizer)

optimizer is the core of a DB engine!

实际运行计划(physical plan) = 访问方式 ( access method) + join算法 + 执行顺序

1.access method

1) index scan

2) file scan

2.join algorithm

1) nested-loop

2) hash

3) sort-merge

3.执行顺序

一个复杂query由一些简单的query(single block)嵌套而成,

如:
select a from T1 where T1.b>(select T2.b from T2 where T2.b=1)

可以被分解为两个简单query:

1)select a from T1 where T1.b>()

2)select T2.b from T2 where T2.b=1

对于每个query,根据一些相等公式,如

产生不同的执行顺序。

一个query如:select * from A,B,C

有多少种计划:

access method:2^3=8

join:3^2=9

order:3!=6

总共:8*9*6=432

这样,一个query有不同的执行计划,如何选择最好的呢?

常见方法:

1.costed-base

计算(估算)计划中每一步的IO cost, 输出的tuple数。

2. rule-base

根据一些经验,query的特点,执行特定的顺序。如: if sql1 是 A型, 使用 plan1

3.random

从众多plan中随机选择,估算其cost。

(oracle数据库的RBO和CBO就是指 rule-based optimization 和 cost-based optimization.)

时间: 2024-11-19 00:17:11

【数据库】优化器(optimizer)的相关文章

各种优化器Optimizer的总结与比较

1.梯度下降法(Gradient Descent) 梯度下降法是最基本的一类优化器,目前主要分为三种梯度下降法: 标准梯度下降法(GD, Gradient Descent) 随机梯度下降法(SGD, Stochastic Gradient Descent) 批量梯度下降法(BGD, Batch Gradient Descent) class tf.train.GradientDescentOptimizer 使用梯度下降算法的Optimizer 标准梯度下降法(GD) 假设要学习训练的模型参数为

优化器Optimizer

目前最流行的5种优化器:Momentum(动量优化).NAG(Nesterov梯度加速).AdaGrad.RMSProp.Adam,所有的优化算法都是在原始梯度下降算法的基础上增加惯性和环境感知因素进行持续优化 Momentum优化 momentum优化的一个简单思想:考虑物体运动惯性,想象一个保龄球在光滑表面滚下一个平缓的坡度,最开始会很慢,但是会迅速地恢复动力,直到达到最终速度(假设又一定的摩擦力核空气阻力) momentum优化关注以前的梯度是多少,公式: \((1)m \leftarro

11g上如何收集优化器(optimizer)统计信息

注:本文参见MOS(my oracle support)英文文档Document:749227.1 - How to Gather Optimizer Statistics on 11g 本文概述了在Oracle 11g中收集CBO(Cost Based Optimizer)统计信息的推荐方法.     本文适用范围:           Oracle Server – 企业版 – 版本 11.1.0.6 to 11.2.0.3           Oracle Server – 标准版 –版本

深入MaxCompute理解数据、运算和用户的大脑:基于代价的优化器

回顾大数据技术领域大事件,最早可追溯到06年Hadoop的正式启动,而环顾四下,围绕着数据库及数据处理引擎,业内充斥着各种各样的大数据技术.这是个技术人的好时代,仅数据库领域热门DB就有300+,围绕着Hadoop生态圈的大数据处理技术更是繁花似锦.在云栖社区2017在线技术峰会大数据技术峰会上,阿里云大数据计算平台架构师林伟做了题为<MaxCompute的大脑:基于代价的优化器>的分享,为大家分享阿里巴巴大数据计算服务的大脑--基于代价的优化器的设计和架构. MaxCompute简介 大数据

Oracle 优化器

http://blog.csdn.net/it_man/article/details/8185370一.优化器基本知识 Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行.分析语句的执行计划的工作是由优化器(Optimizer)来完成的.不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的. 相信你一定会用Pl/sql Developer.Toad等工具去看一个语句的执行计划,不过你可能对Rule.Choos

Oracle优化器和优化模式

Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行.分析语句的执行计划的工作是由优化器(Optimizer) 来完成的.不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的.相信你一定会用Pl/sql Developer.Toad等工具去看一个语句的执行计划,不过你可能对Rule.Choose.First rows.All rows这几项有疑问,因为我当初也是这样的,那时我也疑惑为什么选了以上的不同的项,执行计

Apache Spark 2.2中基于成本的优化器(CBO)(转载)

Apache Spark 2.2最近引入了高级的基于成本的优化器框架用于收集并均衡不同的列数据的统计工作 (例如., 基(cardinality).唯一值的数量.空值.最大最小值.平均/最大长度,等等)来改进查询类作业的执行计划.均衡这些作业帮助Spark在选取最优查询计划时做出更好决定.这些优化的例子包括在做hash-join时选择正确的一方建hash,选择正确的join类型(广播hash join和全洗牌hash-join)或调整多路join的顺序,等等) 在该博客中,我们将深入讲解Spar

Oracle优化器和执行计划

1. 优化器(Optimizer)是sql分析和执行的优化工具,它负责制定sql的执行计划,负责保证sql执行效率最高,比如决定oracle以什么方式访问数据,全表扫描(full table scan)还是索引范围(index range scan)扫描,还是全索引快速扫描(index fast full scan, INDEX_FFS),对于表关联查询,是用什么方式关联.有2种优化器,RBO和CBO,从oracle 10g开始,RBO已经被弃用,但是仍可以通过hint的方式使用. 2. RBO

数据库 mysql 优化器原理

MySQL查询优化器有几个目标,但是其中最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数据行. 你的最终目标是提交SELECT语句查找数据行,而不是排除数据行.优化器试图排除数据行的原因在于它排除数据行的速度越快,那么找到与条件匹配的数据行也就越快. 如何 更好的 利用索引: 1:尽量比较数据类型相同的数据列.当你在比较操作中使用索引数据列的时候,请使用数据类型相同的列.相同的数据类型比不同类型的性能要高一些. 例如,INT与BIGINT是不同的.CHAR(10)被认为是C