1.识别'低效执行'的SQL语句
SELECT EXECUTIONS , DISK_READS, BUFFER_GETS, ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio, ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run, SQL_TEXT FROM V$SQLAREA WHERE EXECUTIONS>0 AND BUFFER_GETS > 0 AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8 ORDER BY 4 DESC;
2.先查询后取结果集
举例:模仿SQL Server实现Top x从结果集获取指定数量(x)的数据条数 select top 1 f from A;
select f from (select f from A where f=0) where rownum <= 1;
3.WHERE子句的顺序约定
表连接子句必须写在其它WHERE子句之前,那些可以过滤掉最大数量记录的条件建议写在WHERE子句的末尾。
原因:ORACLE采用自下而上的顺序解析WHERE子句
4.SELECT子句中避免使用星号(*)
ORACLE在解析的过程中, 会将星号依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间.
5.删除重复记录
DELETE FROM A WHERE A.ROWID > (SELECT MIN(B.ROWID) FROM B WHERE B.id = A.id);
6.用EXISTS替换DISTINCT
当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换
例如-->
低效: SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D,EMP E WHERE D.DEPT_NO = E.DEPT_NO 高效: SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT ‘X' FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO);
EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果.
7.WHERE子句中, 如果索引列所对应的值的第一个字符由通配符(WILDCARD)开始, 索引将不被采用.
8.基础表的选择
基础表(Driving Table)是指被最先访问的表(通常以全表扫描的方式被访问). 根据优化器的不同, SQL语句中基础表的选择是不一样的.
如果用CBO (COST BASED OPTIMIZER),优化器会检查SQL语句中的每个表的物理大小,索引的状态,然后选用花费最低的执行路径.
如果用RBO (RULE BASED OPTIMIZER) , 并且所有的连接条件都有索引对应, 在这种情况下, 基础表就是FROM 子句中列在最后的那个表.
9. 避免在索引列上使用IS NULL和IS NOT NULL
避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引 .
10.WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列.
11.内部发生的类型转换,索引将失效!
为了避免ORACLE对字段进行隐式的类型转换, 最好把类型转换用显式表现出来. 注意当字符和数值比较时, ORACLE会优先转换数值类型到字符类型.
12.‘!=' 将不使用索引. 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中.
13.‘||'是字符连接函数. 就象其他函数那样, 停用了索引.
14.‘+'是数学函数. 就象其他数学函数那样, 停用了索引.
15.下面的例子中,相同的索引列不能互相比较,这将会启用全表扫描.
不使用索引:
SELECT ACCOUNT_NAME, AMOUNT FROM TRANSACTION WHERE ACCOUNT_NAME = NVL(:ACC_NAME,ACCOUNT_NAME);
使用索引:
SELECT ACCOUNT_NAME, AMOUNT FROM TRANSACTION WHERE ACCOUNT_NAME LIKE NVL(:ACC_NAME,'%');
如果一定要对使用函数的列启用索引, ORACLE新的功能: 基于函数的索引(Function-Based Index) 也许是一个较好的方案.
CREATE INDEX EMP_I ON EMP (UPPER(ename)); /*建立基于函数的索引*/ SELECT * FROM emp WHERE UPPER(ename) = ‘BLACKSNAIL'; /*将使用索引*/
16.? 手工创建快照
SQL>EXEC dbms_workload_repository.create_snapshot ? 产生AWR报告 SQL>@$ORACLE_HOME/rdbms/admin/awrrpt.sql
17.在 Alter table 或 Create table 后加 cache 子句来使表成为缓存表(不被请出)
发表评论
文章已被作者锁定,不允许评论。
-
DB2 学习笔记
2012-03-19 12:28 0ORACLE CREATE TABLE COLUMN DEFA ... -
Oracle Session
2010-12-14 15:50 760select sid,user,status,machine, ... -
9i新特性之Flashback Query的应用-------------针对DML误操作的恢复【转】
2010-12-09 10:07 594用dbms_flashback包 dbms_flashb ... -
ORACLE【Undo Tablespace】
2010-12-08 15:28 986--查看unco tablespace使用情况的语句 SE ... -
oracle asm学习
2010-12-08 11:11 9001.什么是ASM ASM全称 ... -
Oracle学习之路【六】确定当前ORACLE的性能瓶颈
2010-12-03 13:57 802确定当前ORACLE的性能瓶颈 首先,利用V$SYSTEM_ ... -
Java排序【转】
2010-12-03 13:46 765=============================== ... -
Oracle学习之路【二】
2010-12-03 13:43 774=============================== ... -
Oracle学习之路【一】
2010-12-03 13:32 729============================= ... -
染指内存数据库【一】
2010-10-25 13:35 923IBM solidDB 可以部署为一个独立的内存数据库 ... -
ORACLE索引表学习
2010-08-18 16:45 1297索引表与标准表的差异 一、索引表中的ROW ... -
ORACLE零散乱记
2010-06-15 15:15 964PGA_AGGREGATE_TARGET = (物理内存大小 ... -
ORACLE10g 自动SGA管理(一)
2010-01-23 19:33 923SGA -- 数据库块缓冲高速缓存 (db_cache_ ... -
ORACLE10g 闪回表学习
2010-01-23 19:20 638当表被Drop掉后,表及其相关对象被放在一个称 ... -
ORACLE10g ASSM 学习(二)
2010-01-20 21:14 728创建存储过程show_space create or ... -
ORACLE10g ASSM 学习(一)
2010-01-20 20:51 768创建存储过程show_space_assm CREAT ... -
ORACLE10g学习笔记(六)
2010-01-17 23:06 7681. 自动碎片整理 Coalesce ... -
ORACLE10g学习笔记(五)
2010-01-17 19:48 5781. 检查Oracle的进程 $ ... -
ORACLE10g学习笔记(四)
2010-01-17 19:41 7301. 实时查询最耗CPU资源的SQL语句 1. 先通过top ... -
ORACLE10g学习笔记(三)
2010-01-17 17:40 7481. 数据库字符集 通过AL ...
相关推荐
Oracle10g学习笔记,Oracle10g学习笔记Oracle10g学习笔记Oracle10g学习笔记Oracle10g学习笔记Oracle10g学习笔记
开发技巧展示是《成功之路:Oracle 11g学习笔记》的一大特色(这一点很值得资深的开发人员借鉴)! 《成功之路:Oracle 11g学习笔记》共24章,主要介绍了Oracle安装、干净卸载Oracle、数据库启动关闭、Oracle网络配置等...
│ Oracle 10G 数据库系统学习笔记.pdf │ Oracle DBA学习心得 --第0章 - ColorfulStar3399的专栏 - CSDN博客.mht │ Oracle DBA学习心得 --第1章 - ColorfulStar3399的专栏 - CSDN博客.mht │ Oracle Direct-Path ...
《成功之路Oracle11g学习笔记》是一本专为初学者设计的Oracle数据库学习资源,旨在帮助读者系统地掌握Oracle11g的基础知识。Oracle11g是Oracle公司推出的一个重要版本,它提供了许多增强的功能和优化,使得数据库...
资源名称:成功之路:Oracle 11g学习笔记内容简介:本书专为开发人员编写,先引导开发新手熟悉Oracle环境,然后进入数据库开发,并要掌握项目开发中的一些技巧。开发技巧展示是本书的一大特色(这一点很值得资深的...
总结来说,"Oracle11g学习笔记"将引导你全面掌握Oracle11g数据库管理系统,从基础操作到高级应用,从数据库设计到性能优化,从安全管理到高可用性实践,为你的IT事业打下坚实基础。通过阅读这个PDF文档,你将能够...
成功之路Oracle11g学习笔记-赵振平 请下载2个附件
Oracle 11g作为一款成熟的关系型数据库管理系统,其性能调整能力一直是众多数据库管理员(DBA)和开发人员关注的焦点。本学习笔记以第17章构筑高速运行的SQL语句为例,详细探讨了Oracle数据库性能调整的相关知识点。 ...
Oracle 11g学习笔记一 此笔记为个人在学习Oracle时从教学视频、参考书上摘录整理而来,纯手打完成
本学习笔记详细记录了作者在准备Oracle 11g OCP认证过程中的学习心得和实践经验,对于希望深入理解Oracle数据库管理和优化的读者来说,是一份宝贵的资料。 Oracle 11g包含了许多重要的特性和改进,例如: 1. **...
《韩顺平j2ee-玩转oracle10g学习笔记》是一份全面记录了韩顺平老师关于Oracle 10g数据库系统教学内容的文档。Oracle 10g是Oracle公司推出的一个重要版本,它在数据库管理、性能优化、安全性、可扩展性和灾难恢复等...
ORACLE10G学习笔记 包括基础知识 SQl基本语句 安全备份与恢复
Oracle 11g是一款强大的关系型数据库管理系统,其在企业级应用中占据着重要的地位。在学习Oracle 11g的过程中,了解并掌握其基本概念、安装、用户管理、权限和角色、数据对象以及管理工具的使用至关重要。 首先,...
### Oracle 10g 学习笔记:深入理解与配置要点 #### 一、Oracle 10g系统架构与配置参数 Oracle 10g作为一款成熟的关系型数据库管理系统,其内部架构主要由共享内存区域(SGA)和程序全局区(PGA)组成。在学习与...
Oracle 10g SQL 学习笔记涵盖了Oracle数据库的基础知识,包括版本信息、数据库系统特点、关系型数据库结构、SQL语言、操作环境以及常见的数据库操作。以下是对这些知识点的详细说明: 1. **Oracle 9i基础知识**: ...
韩顺平2011玩转oracle10g学习笔记,是学习oracle数据库10G的必备文档.doc
本学习笔记将深入探讨Oracle 11g的关键特性和技术,帮助读者掌握其核心知识。 一、Oracle 11g概述 Oracle 11g是Oracle公司推出的数据库版本,主要特点是提升了性能、可用性和安全性。它提供了众多新功能,如自动...
成功之路 Oracle 11g 中文学习笔记 专为开发人员编写,先引导开发新手熟悉Oracle环境,然后进入数据库开发,并要掌握项目开发的一些技巧。开发技巧展示是本书一大特色(这一点很值得资深的开发人员借鉴)! 本书共24...
以下是对这份"最牛逼的Oracle 11g OCP学习笔记"中的关键知识点的详细阐述: 一、Oracle 11g基础知识 Oracle 11g引入了许多新特性,如自动内存管理、数据屏蔽、实时应用集群(RAC)、闪回数据库等。其中,自动内存管理...