- 浏览: 142085 次
- 性别:
- 来自: 上海
文章分类
最新评论
FROM EMP X WHERE X.EMP_NO = E.EMP_NO);
COMMIT所释放的资源:
a. 回滚段上用于恢复数据的信息.
b. 被程序语句获得的锁
c. redo log buffer 中的空间
d. ORACLE为管理上述3种资源中的内部花费
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;
SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E
(高效):
SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT ‘X'
FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO);
WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描.
举例:
低效:
SELECT … FROM DEPT WHERE SAL * 12 > 25000;
高效:
SELECT … FROM DEPT WHERE SAL > 25000/12;
SELECT * FROM EMP WHERE DEPTNO >=4
低效:
SELECT * FROM EMP WHERE DEPTNO >3
两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录.
高效:
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE LOC_ID = 10
UNION
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE REGION = “MELBOURNE”
低效:
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE LOC_ID = 10 OR REGION = “MELBOURNE”
如果你坚持要用OR, 那就需要返回记录最少的索引列写在最前面.
SELECT…. FROM LOCATION WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30
高效
SELECT… FROM LOCATION WHERE LOC_IN IN (10,20,30);
SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL;
高效: (索引有效)
SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0;
SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
UNION
SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
高效:
SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
UNION ALL
SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序.
ORDER BY中所有的列必须定义为非空.
WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列.
表DEPT包含以下列:
DEPT_CODE PK NOT NULL
DEPT_DESC NOT NULL
DEPT_TYPE NULL
SELECT DEPT_CODE FROM DEPT ORDER BY DEPT_TYPE
高效: (使用索引)
SELECT DEPT_CODE FROM DEPT WHERE DEPT_TYPE > 0
SELECT … FROM EMP WHERE EMPNO = ‘123'
实际上,经过ORACLE类型转换, 语句转化为:
SELECT … FROM EMP WHERE EMPNO = TO_NUMBER(‘123')
幸运的是,类型转换没有发生在索引列上,索引的用途没有被改变.
现在,假设EMP_TYPE是一个字符类型的索引列.
SELECT … FROM EMP WHERE EMP_TYPE = 123
这个语句被ORACLE转换为:
SELECT … FROM EMP WHERETO_NUMBER(EMP_TYPE)=123
因为内部发生的类型转换, 这个索引将不会被用到! 为了避免ORACLE对你的SQL进行隐式的类型转换, 最好把类型转换用显式表现出来. 注意当字符和数值比较时, ORACLE会优先转换数值类型到字符类型
在下面的例子里, (1)‘!=' 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中. (2) ‘||'是字符连接函数. 就象其他函数那样, 停用了索引. (3) ‘+'是数学函数. 就象其他数学函数那样, 停用了索引. (4)相同的索引列不能互相比较,这将会启用全表扫描.
b. 在特定情况下, 使用索引也许会比全表扫描慢, 但这是同一个数量级上的区别. 而通常情况下,使用索引比全表扫描要块几倍乃至几千倍!
执行耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序. 通常, 带有UNION, MINUS , INTERSECT的SQL语句都可以用其他方式重写. 如果你的数据库的SORT_AREA_SIZE调配得好,使用UNION , MINUS, INTERSECT也是可以考虑的, 毕竟它们的可读性很强
SELECT JOB , AVG(SAL)
FROM EMP
GROUP JOB
HAVING JOB = ‘PRESIDENT'
OR JOB = ‘MANAGER'
高效:
SELECT JOB , AVG(SAL)
FROM EMP
WHERE JOB = ‘PRESIDENT'
OR JOB = ‘MANAGER'
GROUP JOB
发表评论
-
(转)《阿里巴巴数据库标准操作手册》目录
2012-04-18 14:59 1941转自:http://www.alidba.net/ ... -
(转)利用dbms_metadata.get_ddl查看DDL语句
2012-02-29 15:42 1105来源:http://www.cnblogs.com ... -
(转)Oracle数据库的自动导出备份脚本(windows环境)
2011-12-30 13:53 1461转自Oracle数据库的自动导出备份脚本(windows环境 ... -
Oracle中的 UPDATE FROM 解决方法
2011-12-19 05:13 1015在表的更新操作 ... -
oracle 10g 修改SGA,PGA大小
2011-11-12 11:42 1192一、概念SGA指系统全局区域(System Global ... -
(转)alter system 中SCOPE的含义
2011-11-12 11:41 1211■哪些参数可以用Alter System修改alter ... -
(转)详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
2011-11-07 16:08 649数据库名、实例名、数据库域名、全局数据库名、服务名 ,这是 ... -
ORACLE EM的删除与创建(转)
2011-09-08 13:11 3382手动删除ORACLE 10G EM 使用emca可以手动配 ... -
Oracle10g SCHEDULE job
2011-09-06 17:10 1297BEGIN SYS.DBMS_SCHEDULER.CRE ... -
oracle orion用法(IO压力测试)
2011-09-06 13:46 3815orion--oracle公司提供的IO存储测试软件 o ... -
Oracle客户端精简绿色版
2011-08-31 17:19 969大型项目开发中,常 ... -
(转)Oracle的RAC环境下SYS密码修改
2011-08-31 02:31 6519sys是数据库库中权限最高的用户,在登录时,我们可以用os认证 ... -
oracle中imp命令详解(转)
2011-08-30 10:09 1093Oracle的导入实用程序(Import utili ... -
ORACLE日期问题
2011-08-30 02:09 8801、转换函数 与date操作关系最大的 ... -
OEM乱码解决方法
2011-08-29 21:35 1192方法1:(推荐使用这个方法)打开IE浏览器, 选择'工具&qu ... -
RAC启动dbconsole报错
2011-08-29 21:24 1092RAC启动dbconsole 抛出一个错误 [ora ...
相关推荐
ORACLE SQL性能优化系列 ORACLE SQL性能优化是数据库管理员和开发者非常关心的一个话题。为了提高数据库的性能,ORACLE 提供了多种优化技术。下面我们将详细介绍 ORACLE SQL 性能优化系列中的一些重要知识点。 一...
Oracle SQL 性能优化 Oracle SQL 性能优化是数据库管理中非常重要的一环。通过对 SQL 语句执行的过程、Oracle 优化器、表之间的关联、如何得到 SQL 执行计划、如何分析执行计划等内容的讨论,可以逐步掌握 SQL ...
ORACLE SQL性能优化.chm ORACLE SQL性能优化.chm ORACLE SQL性能优化.chm
《Oracle SQL性能优化》这本书是数据库管理员和开发人员的重要参考资料,它深入探讨了如何提高Oracle数据库的SQL查询性能。在数据库系统中,SQL查询的速度直接影响到应用的响应时间和整体性能,因此,理解并掌握SQL...
### ORACLE-SQL性能优化大全知识点详述 #### 一、优化基础知识概述 - **性能管理**: - **尽早开始**:性能优化应该在项目的早期就开始考虑,而不是等到后期出现性能瓶颈时才去处理。 - **设立合适目标**:设定...
Oracle Sql性能优化 解宝喆 1、选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在...
简单的整理了一些Oracle性能优化方面的知识。 供大家参考学习。
Oracle SQL性能优化是数据库管理中的重要环节,直接影响到应用程序的响应速度和整体系统效率。本文主要探讨了两个关键方面:优化器的选择和访问表的方式。 首先,Oracle 提供了三种优化器供选择:RULE、COST 和 ...
【Oracle SQL性能优化】 Oracle SQL性能优化是数据库开发人员必须掌握的关键技能,它涉及到SQL语句的编写、执行过程、优化器的选择以及执行计划的分析等多个方面。在Oracle数据库环境中,优化SQL性能对于提升系统...
ORACLE SQL性能优化 通过init.ora文件中OPTIMIZER_MODE声明 RULE (基于规则) 所遵循的是Oracle内部预定的一些规则。比如当一个where子句中的一列有索引时去走索引。 COST (基于成本) 你必须经常运行analyze ...
Oracle SQL 优化是数据库性能优化的关键部分。为了提高数据库的性能,我们需要从五个方面进行调整:去掉不必要的大型表的全表扫描、缓存小型表的全表扫描、检验优化索引的使用、检验优化的连接技术、尽可能减少执行...
3本经典oracle sql性能优化的的书,值得一看: Oracle.High.Performance.Tuning.for.9i.and.10g.chm Oracle性能优化技术内幕.pdf SQL Performance Tuning -0201791692.chm
ORACLESQL性能优化,多学习,每天进步一点点
Oracle SQL 性能优化 40 条 以下是 Oracle SQL 性能优化 40 条的知识点总结: 一、SQL 语句执行步骤 * 语法分析:检查 SQL 语句的语法正确性 * 语义分析:分析 SQL 语句的逻辑含义 * 视图转换:将 SQL 语句转换为...
性能管理 性能问题 调整的方法 SQL优化机制 应用的调整 SQL语句的处理过程 共享SQL区域 SQL语句处理的阶段 共享游标 SQL编码标准 Oracle 优化器介绍 SQL Tunning Tips 优化Tools
Oracle SQL性能优化规范是一套指导原则,旨在帮助数据库管理员和开发人员提高SQL查询在Oracle数据库中的执行效率。这些规范考虑了数据库设计、查询构造、索引使用和优化器策略等多个方面,以确保数据检索的速度和...
ORACLE SQL性能优化 全