返回顶部
首页 > 资讯 > 数据库 >如何调优 Oracle SQL系列文章:查询优化器介绍
  • 656
分享到

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

2024-04-02 19:04:59 656人浏览 安东尼
摘要

如何调优 oracle sql系列文章 第四篇: 查询优化器概念之查询优化器介绍 。 4 查询优化器概念 本章描述了与查询优化器相关的最重要的概念,及其主要组件。 4.

如何调优 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 语句生成两个可能的执行计划,使用统计信息估算其成本,比较其成本,然后选择成本最低的计划。

如何调优 Oracle 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分钟,以此类推。

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

您可能感兴趣的文档:

--结束END--

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

本文链接: https://lsjlt.com/news/46070.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何调优 Oracle SQL系列文章:查询优化器介绍
    如何调优 Oracle SQL系列文章 第四篇: 查询优化器概念之查询优化器介绍 。 4 查询优化器概念 本章描述了与查询优化器相关的最重要的概念,及其主要组件。 4....
    99+
    2024-04-02
  • 如何调优 Oracle SQL系列文章:SQL性能方法论
    如何调优 Oracle SQL系列文章 第二篇: SQL性能方法论。 2 SQL性能方法论 2.1 应用程序设计指南 获得良好SQL性能的关键是在设计应用程序时考虑性能。 2.1.1...
    99+
    2024-04-02
  • 如何优化SQL查询
    本篇文章给大家分享的是有关如何优化SQL查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们致力于打造能够较好运行并延续较长一段时间的que...
    99+
    2024-04-02
  • 如何调优SQL Server查询
    这期内容当中小编将会给大家带来有关如何调优SQL Server查询,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在今天的文章里,我想给你展示下,当你想对特定查询创建索引设...
    99+
    2024-04-02
  • sql分页查询如何优化
    优化 SQL 分页查询的方法有很多,以下是一些常见的优化策略:1. 使用索引:为要查询的列创建合适的索引,可以大大提高查询速度。尤其...
    99+
    2023-09-20
    sql
  • SQL级别查询优化器参数调整
    SQL查询优化器(SQL optimizer)是数据库管理系统中的一个重要组件,它负责优化SQL查询语句的执行计划,以提高查询性能。调整SQL查询优化器参数可以帮助改善查询性能,提高数据库系统的效率。 以下是一些可以考虑调整的SQL查询优化...
    99+
    2024-08-03
    sql
  • 如何理解SQL子查询优化
    这篇文章主要介绍“如何理解SQL子查询优化”,在日常操作中,相信很多人在如何理解SQL子查询优化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解SQL子查询优化”的疑惑...
    99+
    2024-04-02
  • sql语句查询慢如何优化
    优化 SQL 查询性能的方法有很多,以下是一些常见的优化技巧:1. 索引优化:使用适当的索引可以大大提高查询性能。考虑创建索引以支持...
    99+
    2023-09-27
    sql
  • sql多条件查询如何优化
    优化 SQL 多条件查询可以通过以下几个方面来实现:1. 索引优化:确保查询涉及的字段都有相应的索引。可以使用 EXPLAIN 或者...
    99+
    2023-08-22
    sql
  • oracle跨分区查询慢如何优化
    要优化Oracle跨分区查询的性能,可以考虑以下几点: 在查询中尽量避免使用跨分区的条件,尽量只查询单个分区的数据,可以通过分区...
    99+
    2024-05-13
    oracle
  • 如何用机器学习优化SQL拼接查询
    使用机器学习优化SQL拼接查询可以通过以下步骤实现: 数据准备:收集和准备用于训练的数据集,包括已有的SQL查询语句和其对应的性...
    99+
    2024-04-29
    SQL 机器学习
  • 如何实现MySQL底层优化:查询优化器的工作原理及调优方法
    如何实现MySQL底层优化:查询优化器的工作原理及调优方法在数据库应用中,查询优化是提高数据库性能的重要手段之一。MySQL作为一种常用的关系型数据库管理系统,其查询优化器的工作原理及调优方法十分重要。本文将介绍MySQL查询优化器的工作原...
    99+
    2023-11-08
    MySQL 查询优化器 调优方法。
  • MySQL-如何定位慢查询SQL以及优化
    如何定位慢查询SQL以及优化 慢查询日志记录慢SQLexplain查看分析SQL执行计划profile分析执行耗时Optimizer Trace分析详情确定问题采用响应措施 慢查询日志记录...
    99+
    2023-09-12
    sql 数据库 java
  • 如何通过缓存+SQL修改优化慢查询
    本篇内容介绍了“如何通过缓存+SQL修改优化慢查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题描述单...
    99+
    2023-04-14
    sql
  • 如何通过调优SQL查询以提高Hadoop性能
    调优SQL查询可以显著提高Hadoop的性能。以下是一些可以帮助优化SQL查询的方法: 确保正确使用索引:在Hadoop中使用索...
    99+
    2024-04-09
    Hadoop
  • Oracle数据库如何通过ODBC优化查询
    要通过ODBC优化查询Oracle数据库,可以采取以下几种方法: 使用索引:在数据库中创建适当的索引,可以加快查询速度。确保在查询中使用的列上有适当的索引。 使用参数绑定:在查询中使用参数绑定,而不是直接将参数值嵌入到查询语句中。这...
    99+
    2024-07-15
    oracle
  • DB2性能优化 – 如何通过db2优化工具提升SQL查询效率
           我们都知道,应用系统在运行一段时间后,用户报告系统运行会变慢,使他们不能完成所有的工作,完成事务和处理查询花费过长时间,或者应用程序...
    99+
    2024-04-02
  • MariaDB中如何进行查询优化和性能调整
    要在MariaDB中进行查询优化和性能调整,可以采取以下几种方法: 使用合适的索引:通过为经常查询的字段添加索引,可以加快查询速度...
    99+
    2024-04-09
    MariaDB
  • 如何在Teradata中进行复杂的SQL查询优化
    在Teradata中进行复杂的SQL查询优化,可以按照以下几个步骤进行: 确定查询的目的和需求:首先要明确查询的目的和需要获取的...
    99+
    2024-04-02
  • 如何通过ODBC在Oracle中优化查询缓存
    要通过ODBC在Oracle中优化查询缓存,可以考虑以下几点: 使用ODBC连接池:通过使用ODBC连接池可以减少连接数据库的开销,提高查询的性能。连接池会在应用程序启动时建立一定数量的连接,当需要执行查询时,直接从连接池中获取连接,避...
    99+
    2024-07-16
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作