干预oracle执行计划的一个具体案例

环境:oracle 817 + linux + 阵列柜

swd_billdetail 表5000万条数据

SUPER_USER 表2800条数据

连接列上都有索引,而且super_user中的一条对应于swd_billdetail表中的很多条记录

表与索引都做了分析。

实际应用的查询为:

select a.CHANNEL, B.user_class

from swd_billdetail B, SUPER_USER A

where A.cn = B.cn;

这样在分析时导致查询出的数据过多,不方便,所以用count(a.CHANNEL||B.user_class)来代替,而且count(a.CHANNEL||B.user_class)操作本身并不占用过多的时间,所以可以接受此种替代。

利用索引查询出SWD_BILLDETAIL表中所有记录的方法

SQL> select count(id) from SWD_BILLDETAIL;

COUNT(ID)

----------

53923574

Elapsed: 00:02:166.00

Execution Plan

----------------------------------------------------------

0   SELECT STATEMENT Optimizer=CHOOSE (Cost=18051 Card=1)

1  0  SORT (AGGREGATE)

2  1   INDEX (FAST FULL SCAN) OF 'SYS_C001851' (UNIQUE) (Cost=18051 Card=54863946)

Statistics

----------------------------------------------------------

0 recursive calls

1952 db block gets

158776 consistent gets

158779 physical reads

1004 redo size

295 bytes sent via SQL*Net to client

421 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

1 sorts (memory)

0 sorts (disk)

1 rows processed

时间: 2024-04-29 11:21:03

干预oracle执行计划的一个具体案例的相关文章

如何使用hints提示干预Oracle执行计划

基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比.此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从而使语句高效的运行.例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫描.在ORACLE中,是通过为语句添加hints(提示)来实现干预优化器优化的目的. hints是oracle提供的一种

利用Oracle执行计划机制提高查询性能

oracle|性能|执行 消耗在准备利用Oracle执行计划机制提高查询性能新的SQL语句的时间是Oracle SQL语句执行时间的最重要的组成部分.但是通过理解Oracle内部产生执行计划的机制,你能够控制Oracle花费在评估连接顺序的时间数量,并且能在大体上提高查询性能. 准备执行SQL语句 当SQL语句进入Oracle的库缓存后,在该语句准备执行之前,将执行下列步骤: 1) 语法检查:检查SQL语句拼写是否正确和词序. 2) 语义分析:核实所有的与数据字典不一致的表和列的名字. 3) 轮

ORACLE执行计划的查看

前言 一个系统在刚开始的时候,由于数据库中数据量不大,开发人员的主要精力都在业务与功能实现上.系统完成部署上线后随着时间的累积,每个表中的数据都在不断增长,我们往往会发现系统越来越慢,这可能是程序设计不合理,也可能是代码质量不高,也可能是业务流程问题,但是作为DBA或者负责数据库调优的工程师更应该想想是否是数据库方面的问题.数据库问题有很多种,作为开发人员主要关注SQL语句的合理性,至于数据库的其它问题可以暂时交给DBA去处理.对SQL语句调优,很重要的一点是查看SQL语句的执行计划.本文将简单

Oracle执行计划filter下多个节点的优化

Oracle执行计划filter下多个节点的优化 FILTER操作是执行计划中常见的操作,这种操作有两种情况:   l 只有一个子节点,那么就是简单过滤操作. l 有多个子节点,那么就是类似NESTED LOOPS操作,只不过与NESTED LOOPS差别在于,FILTER内部会构建HASH表,对于重复匹配的,不会再次进行循环查找,而是利用已有结果,提高效率.但是一旦重复匹配的较少,循环次数多,那么,FILTER操作将是严重影响性能的操作,可能你的SQL几天都执行不完了. 真题1.执行计划里的a

查看oracle执行计划方法( 一)

关于oracle执行计划的概念,参考之前的博客:http://blog.csdn.net/cymm_liu/article/details/7996599 如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题. 如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统资源和阻塞的原因,那么基本可以断定是执行计划出了问题. 看懂执行计划也就成了SQL优化的先决条件. 这里的SQL优化指的是SQL性能问题的定位,定位后就可以解决问题. 一. 

如何分析Oracle执行计划(一)

1.如何分析执行计划 例1: 假设LARGE_TABLE是一个较大的表,且username列上没有索引,则运行下面的语句: SQL> SELECT * FROM LARGE_TABLE where USERNAME = 'TEST': Query Plan ----------------------------------------- SELECT STATEMENT   Optimizer=CHOOSE (Cost=1234 Card=1 Bytes=14) TABLE ACCESS FU

ORACLE执行计划的访问路径

三.访问路径(方法) -- access path 优化器在形成执行计划时需要做的一个重要选择是如何从数据库查询出需要的数据.对于SQL语句存取的任何表中的任何行,可能存在许多存取路径(存取方法),通过它们可以定位和查询出需要的数据.优化器选择其中自认为是最优化的路径. 在物理层,oracle读取数据,一次读取的最小单位为数据库块(由多个连续的操作系统块组成),一次读取的最大值由操作系统一次I/O的最大值与multiblock参数共同决定,所以即使只需要一行数据,也是将该行所在的数据库块读入内存

ORACLE执行计划的执行步骤

有了这些背景知识后就开始介绍执行计划.为了执行语句,Oracle可能必须实现许多步骤.这些步骤中的每一步可能是从数据库中物理检索数据行,或者用某种方法准备数据行,供发出语句的用户使用.Oracle用来执行语句的这些步骤的组合被称之为执行计划.执行计划是SQL优化中最为复杂也是最为关键的部分,只有知道了ORACLE在内部到底是如何执行该SQL语句后,我们才能知道优化器选择的执行计划是否为最优的.执行计划对于DBA来说,就象财务报表对于财务人员一样重要.所以我们面临的问题主要是:如何得到执行计划:如

ORACLE执行计划的背景知识

一.背景知识: 为了更好的进行下面的内容我们必须了解一些概念性的术语: 1.共享sql语句 为了不重复解析相同的SQL语句(因为解析操作比较费资源,会导致性能下降),在第一次解析之后,ORACLE将SQL语句及解析后得到的执行计划存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享.因此,当你执行一个SQL语句(有时被称为一个游标)时,如果该语句和之前的执行过的某一语句完全相同,并且之前