- 浏览: 142490 次
- 性别:
- 来自: 上海
文章分类
最新评论
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 1945转自:http://www.alidba.net/ ... -
(转)利用dbms_metadata.get_ddl查看DDL语句
2012-02-29 15:42 1110来源:http://www.cnblogs.com ... -
(转)Oracle数据库的自动导出备份脚本(windows环境)
2011-12-30 13:53 1470转自Oracle数据库的自动导出备份脚本(windows环境 ... -
Oracle中的 UPDATE FROM 解决方法
2011-12-19 05:13 1020在表的更新操作 ... -
oracle 10g 修改SGA,PGA大小
2011-11-12 11:42 1198一、概念SGA指系统全局区域(System Global ... -
(转)alter system 中SCOPE的含义
2011-11-12 11:41 1222■哪些参数可以用Alter System修改alter ... -
(转)详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
2011-11-07 16:08 655数据库名、实例名、数据库域名、全局数据库名、服务名 ,这是 ... -
ORACLE EM的删除与创建(转)
2011-09-08 13:11 3393手动删除ORACLE 10G EM 使用emca可以手动配 ... -
Oracle10g SCHEDULE job
2011-09-06 17:10 1303BEGIN SYS.DBMS_SCHEDULER.CRE ... -
oracle orion用法(IO压力测试)
2011-09-06 13:46 3824orion--oracle公司提供的IO存储测试软件 o ... -
Oracle客户端精简绿色版
2011-08-31 17:19 982大型项目开发中,常 ... -
(转)Oracle的RAC环境下SYS密码修改
2011-08-31 02:31 6543sys是数据库库中权限最高的用户,在登录时,我们可以用os认证 ... -
oracle中imp命令详解(转)
2011-08-30 10:09 1102Oracle的导入实用程序(Import utili ... -
ORACLE日期问题
2011-08-30 02:09 8851、转换函数 与date操作关系最大的 ... -
OEM乱码解决方法
2011-08-29 21:35 1205方法1:(推荐使用这个方法)打开IE浏览器, 选择'工具&qu ... -
RAC启动dbconsole报错
2011-08-29 21:24 1096RAC启动dbconsole 抛出一个错误 [ora ...
相关推荐
Oracle SQL 性能优化 Oracle SQL 性能优化是数据库管理中非常重要的一环。通过对 SQL 语句执行的过程、Oracle 优化器、表之间的关联、如何得到 SQL 执行计划、如何分析执行计划等内容的讨论,可以逐步掌握 SQL ...
ORACLE SQL性能优化.chm ORACLE SQL性能优化.chm ORACLE SQL性能优化.chm
### ORACLE-SQL性能优化大全知识点详述 #### 一、优化基础知识概述 - **性能管理**: - **尽早开始**:性能优化应该在项目的早期就开始考虑,而不是等到后期出现性能瓶颈时才去处理。 - **设立合适目标**:设定...
《Oracle SQL性能优化》这本书是数据库管理员和开发人员的重要参考资料,它深入探讨了如何提高Oracle数据库的SQL查询性能。在数据库系统中,SQL查询的速度直接影响到应用的响应时间和整体性能,因此,理解并掌握SQL...
Oracle SQL性能优化是一个复杂且重要的主题,涉及到数据库的多个层面,包括优化器的选择、SQL语句的执行方式、共享池的利用以及索引策略。以下是对这些知识点的详细阐述: 1. **选用适合的ORACLE优化器** Oracle...
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
标题和描述中提到的知识点是关于Oracle SQL性能优化的关键策略,这一主题对于任何希望提高其Oracle数据库查询效率的IT专业人士来说都是至关重要的。以下是对这些知识点的深入探讨: ### Oracle SQL 性能优化:理解...
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数据库中的执行效率。这些规范考虑了数据库设计、查询构造、索引使用和优化器策略等多个方面,以确保数据检索的速度和...