ITPub博客

首页 > 数据库 > Oracle > 如何调优 Oracle SQL系列文章:查询优化器介绍

如何调优 Oracle SQL系列文章:查询优化器介绍

原创 Oracle 作者:jelephant 时间:2019-08-21 13:19:16 0 删除 编辑

如何调优 Oracle SQL系列文章 第四篇: 查询优化器概念之查询优化器介绍


4 查询优化器概念

本章描述了与查询优化器相关的最重要的概念,及其主要组件。

4.1 查询优化器介绍

查询优化器(简称为优化器)是内置数据库软件,用于确定 SQL 语句访问请求数据的最有效方法。

4.1.1 查询优化器的用途

优化程序尝试为 SQL 语句生成最佳执行计划。

优化程序在所有考虑的候选计划中选择成本最低的计划。优化程序使用可用的统计信息来计算成本。对于给定环境中的特定查询,成本计算考虑了查询执行的因素,例如I/O、CPU和通信。

例如,查询职位为经理的员工的信息。如果优化程序统计信息表明80%的员工是经理,那么优化程序可能会认为全表扫描最有效。但是,如果统计信息表明很少有员工是经理,那么通过读取索引后根据 rowid 进行回表访问可能比全表扫描更有效。

由于数据库有许多内部统计信息和工具可供使用,因此优化器通常比用户更有利于确定语句执行的最佳方法。因此,所有 SQL 语句都使用优化程序。

4.1.2 基于成本的优化

查询优化是选择执行 SQL 语句的最有效方法的过程。

SQL是一种非过程语言,因此优化器可以按任何顺序自由合并,重组和处理。数据库根据收集的有关访问数据的统计信息优化每个 SQL 语句。优化器通过检查多个访问方法(如全表扫描或索引扫描),不同的连接方法(如嵌套循环和散列连接),不同的连接顺序以及可能的转换来确定 SQL 语句的最佳计划。

对于给定的查询和环境,优化程序会为可能的计划的每个步骤分配相对数字成本,然后将这些值计算在一起以生成计划的总体成本估算。在计算替代计划的成本之后,优化程序选择具有最低成本估算的计划。出于这个原因,优化器有时被称为基于成本的优化器(CBO),以将其与基于规则的优化器(RBO)进行对比。

注意:
优化程序可能不会从一个版本的Oracle数据库到下一个版本做出相同的决策。 
在最新版本中,优化器可能会做出不同的决定,因为它可以获得更你全面的信息,并且可以进行更多的优化器转换。

4.1.3 执行计划

执行计划描述了 SQL 语句的推荐执行方法。

该计划显示了 Oracle 数据库用于执行 SQL 语句的步骤的组合。每个步骤要么从数据库物理上检索数据行,要么为发出语句的用户准备数据行。

执行计划显示整个计划的成本(在第0行中)和每个单独的操作。成本是一个内部单位,执行计划仅仅是显示它,以便与其它计划进行比较。 因此,您无法调整或更改成本值。

在下图中,优化程序为输入 SQL 语句生成两个可能的执行计划,使用统计信息估算其成本,比较其成本,然后选择成本最低的计划。

图4-1 执行计划

4.1.3.1 查询块

优化器的输入是 SQL 语句的解析表示。

原始 SQL 语句中的每个 SELECT 块由查询块在内部表示。 查询块可以是顶级语句,子查询或未合并视图。

示例4-1查询块

以下SQL语句由两个查询块组成。 括号中的子查询是内部查询块。 外部查询块(SQL语句的其余部分)检索由子查询提供ID的部门中的员工的名称。 查询表单确定查询块如何相互关联。

SELECT
 first_name, last_name
FROM
   hr.employees
WHERE
  department_id 
IN
(
SELECT
 department_id 
        
FROM
   hr.departments      
WHERE
  location_id = 1800
);
4.1.3.2 查询子计划

对于每个查询块,优化器生成查询子计划。

数据库从下到上分别优化查询块。 因此,数据库首先优化最里面的查询块并为其生成子计划,然后生成表示整个查询的外部查询块。

查询块的可能计划数与FROM子句中的对象数成比例。该数字随着对象的数量呈指数增长。例如,五个表的连接的可能计划明显高于两个表的连接的可能计划。

4.1.3.3 优化器的类比

优化器可以比作是在线旅行顾问。

骑自行车的人想要知道从A点到B点的最有效的自行车路线。查询就像指令“我需要从A点到B点的最有效路线”或“我需要从A点到到B点经过C点的最有效路线”。“旅行顾问使用内部算法来确定最有效的路线,该算法依赖于速度和难度等因素。骑车人可以通过使用诸如“我想尽快到达”或“我希望最简单的骑行”等指令来影响旅行顾问的决定。

在这个类比中,执行计划是旅行顾问生成的一个可能的路由。在内部,顾问可以将整个路由划分为几个子路由(子计划),并分别计算每个子路由的效率。例如,旅行顾问可能会评估一个中等难度的子路由为15分钟,另一个难度最小的子路由为22分钟,以此类推。

顾问根据用户指定的目标以及有关道路和交通状况的可用统计数据,选择最有效(最低成本)的总体路线。统计越准确,建议越好。例如,如果顾问无法获取交通拥堵,道路封闭和恶劣的道路状况等信息,那么推荐的路线可能效率低(成本高)。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29337971/viewspace-2654407/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2013-12-07

  • 博文量
    143
  • 访问量
    626897