今天刚看到一篇简单的SQL调优,自己也试了一下优化。原文如下:
http://valen.blog.ccidnet.com/blog-htm-do-showone-uid-51502-type-blog-itemid-291732.html
也做了一个简单的测试并做延伸:
Oracle数据库中,有个表:COST_LEDG_H(数据大约300多万)
执行语句:
执行计划如下:
--------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 4 | 1442 (5)| 00:00:18 |
| 1 | SORT AGGREGATE | | 1 | 4 || |
| 2 | INDEX FAST FULL SCAN| COST_LEDG_H_INDEX1 | 3106K| 11M| 1442 (5)| 00:00:18 |
这里发现索引是:INDEX FAST FULL SCAN , 后面大约有6千多个IO次数,
通过下列语句查看索引的IO次数:
输出结果如下:
---------------------- ---------------------- ---------------------- --------------
6253 2 5418 1107960
这时发现该索引的全部页IO次数也是6千多次。这样以来可以确定索引是全部扫描,从根部一直到叶全部扫描了一遍。效率很低:
原因:
我们看看为何Oracle数据库为何要全部扫描索引,我们先来看看索引查询方式,索引只有两种查询:
1,通过索引方式(向前或后向后查询)
2,非索引查找(全部索引搜索)
这里我们看到这里Oracle采用了第2种查询方式,效率比较低,因为这里是一个最大,和一个最小值,数据库如果从第1种方式查也是必需从头到尾的查询其实也就是第二种方式。这里只是一次索引查询的结果。如果是两次索引查询,就可以大大提高查询性能。
如改写成如下语句:
union all select max(INIT_UNIT_COST) from COST_LEDG_H;
或
,(select max(INIT_UNIT_COST) from COST_LEDG_H) from dual
扩展:
这次我在SQL server 2005中查询类似语句,速度很快,看了一下执行计划,SQL server 2005 智能的将一次查询索引分成了两次索引查找。这点SQL server 2005 要比Oracle 10gR2要聪明一些。
发表评论
-
Oracle plsql后台程序建议
2011-03-02 12:03 712个人改进建议: 1、游标取数时,采用批量取数的方法: ... -
oracle10g 的一个问题
2011-03-02 11:39 646oracle10g 的一个问题: 创建主键的时候, 默 ... -
Oracle视图使用
2011-02-15 17:13 0Oracle视图使用经验谈: 1、如果视图仅仅是 ... -
Oracle 10g 中的递归查询(树型查询)
2011-01-27 01:35 931Oracle 10g 中的递归查询(树型查询) 一、树型表 ... -
PLSQL 中Merge into和Update的用法
2011-01-27 01:31 1481在oracle 中有个语法:merge 用法如下: ... -
Oracle培训的总结
2011-01-27 01:30 700前段时间,因为要升级系统到Oracle环境,公司请了一位在 ... -
Oracle 培训材料
2011-01-27 01:29 628前段时间给公司做个Oracle培训,一直在学oracl ... -
PL/SQL最差实践
2011-01-27 01:15 5701. 超长的PL/SQL代码 影响:可维护性,性能 ... -
大表变小表,小表再连接————记一次PL/SQL优化过程
2011-01-27 01:12 1247公司的业务系统中存在一个大的日志表,表大约是这样:cre ... -
高效的PL/SQL程序设计--批量处理
2011-01-27 00:59 614批量处理一般用在ETL操作, ETL代表提取(extract) ... -
PL/SQL用户指南与参考--PL/SQL应用程序性能调优(转)
2011-01-27 00:57 628PL/SQL应用程序性能调优 <!-- Instanc ... -
PLSQL 中Merge into和Update的用法
2011-01-18 20:42 1289这两天一直在处理关于SQL server存储过程转换到Orac ... -
PL/SQL优化
2011-01-18 19:51 838PL/SQL优化 注:O代表比X 更优化的写法。 以 ... -
Oracle SQL 内置函数大全
2009-03-25 21:25 634SQL中的单记录函数 1.ASCI ... -
PL/SQL中用光标查询多条记录
2009-03-25 21:19 738一、 什么是光标 Oracle ... -
PL/SQL开发中动态SQL的使用方法
2009-03-25 21:11 1125一般的PL/SQL程序设计中,在DML和事务控制的语句中可 ...
相关推荐
Oracle 19C SQL调优是数据库管理员(DBA)日常工作中不可或缺的一部分,它涉及到优化SQL查询性能,提高数据库系统的整体效率。本指南针对Oracle 19C版本,提供了丰富的调优策略和技术,旨在帮助DBA们更好地管理和维护...
《Oracle 19C SQL调优指南》是针对Oracle数据库管理员(DBA)的重要参考资料,尤其适合那些希望提升SQL性能的专业人士。SQL调优是数据库管理中的核心技能,它关乎到系统的响应时间、资源利用率和整体性能。Oracle 19C...
Oracle 19C SQL调优优化指南,全面提升SQL优化能力,DBA必备,开发必备
Oracle Sql 性能调优 Oracle SQL 性能调优是一个非常重要的课题,它涉及到 Oracle 数据库的性能优化,包括 SQL 语句优化、索引使用优化、多表关联查询操作优化、SQL 执行计划优化等。下面是Oracle SQL 性能调优的...
ORACLE_SQL调优老方块出品,深入讲解了ORACLE原理及常见SQL调优技巧
### Oracle的SQL调优宝典 #### 概述 Oracle数据库是业界领先的数据库管理系统之一,在企业级应用中占据着举足轻重的地位。随着数据量的不断增长以及业务复杂度的提升,对Oracle数据库的性能优化变得尤为重要。SQL...
【Oracle执行计划和SQL调优】是数据库管理中至关重要的环节,主要涉及到如何高效地运行SQL语句,提高数据库性能。下面将详细讲解执行计划的相关概念以及SQL调优的策略。 1. **Rowid的概念**:Rowid是Oracle数据库中...
总的来说,这个教程将带你深入理解Oracle数据库的SQL调优技巧,从理论到实践,从基础到高级,全面提升你在面对复杂SQL性能问题时的解决能力。通过学习这个教程,你将能够更好地优化你的数据库,提高系统的整体性能。
Oracle数据库的SQL调优是一个复杂但至关重要的任务。通过对SQL查询的深入理解和合理优化,不仅可以大幅提升应用系统的性能,还能有效利用系统资源。遵循上述基本原则,结合具体的业务场景和技术需求进行细致调整,将...
在Oracle数据库中,SQL调优主要包括以下几个方面: 1. **SQL分析**:通过执行`EXPLAIN PLAN`或使用`DBMS_XPLAN`包来获取SQL执行计划,理解查询如何在数据库中执行,包括表的访问方式(全表扫描、索引扫描等)、连接...
Oracle SQL调优是数据库性能优化的关键环节,尤其是在大型企业应用中,高效的SQL查询能够显著提升系统性能,降低I/O瓶颈的影响。以下是对标题和描述中所述知识点的详细说明: 1. **选择合适的Oracle优化器** ...
SQL statement • Monitor the use of shared SQL areas • Write SQL statements to take advantage of shared SQL areas • Understand how to use the CURSOR_SHARING parameter • Use automatic PGA memory ...
Oracle SQL调优是数据库管理员和开发人员提升数据库性能的关键技能之一。在Oracle数据库环境中,SQL调优涉及到优化查询语句,以减少资源消耗,提高数据处理速度,进而改善整体系统性能。以下是一份详细的Oracle SQL...
sql调优 oracle sql调优技术文档
Oracle SQL调优是数据库管理中的重要环节,它涉及到性能优化、资源利用率以及系统稳定性等多个方面。这个"Oracle SQL 调优健康检查脚本"(sqlhc.sql)显然是一个用于评估和诊断Oracle数据库SQL查询性能的实用工具。...
Oracle数据库作为业界广泛使用的数据库管理系统,其SQL调优是提升系统性能的关键环节。"高性能SQL调优"这一主题涵盖了许多相关知识点,包括但不限于以下内容: 1. **SQL优化基础**:SQL查询是数据库操作的核心,...