- 浏览: 153568 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
驭乐MJ:
好!谢谢啦!正在学习使用sean中。。
Seam学习笔记 -
laorer:
00 -现在,互联网造就了一批富翁,但那时,似乎什么都不会去想 ...
如果时光能够回流到八年前 -
liuqizhi0925:
八年前,OMG ,能改变的事情真的很多...
如果时光能够回流到八年前
Oracle优化笔记
摘自《Oracle 10g SQL 开发指南》
2. 使用UNION ALL 而不是UNION
3. 使用EXISTS而不是IN
4. 使用EXISTS而不是 DISTINCT ;(因为DISTINCT在禁止重复行之前要排序检索到的行)
查看解析计划:
2. select * from table(dbms_xplan.display());
当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在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 1
FROM EMP E
WHERE E.DEPT_NO = D.DEPT_NO);
EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果.
DELETE FROM EMP a
WHERE a.ROWID > (SELECT MIN(b.ROWID)
FROM EMP b WHERE a.EMP_NO = b.EMP_NO);
-- 对于select语句中 过滤重复记录,则可以使用类似
WHERE a.ROWID = (SELECT MIN(b.ROWID) FROM EMP b WHERE a.EMP_NO = b.EMP_NO);
只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:
COMMIT所释放的资源:
a. 回滚段上用于恢复数据的信息.
b. 被程序语句获得的锁
c. redo log buffer 中的空间
d. ORACLE为管理上述3种资源中的内部花费
·表索引一些注意的地方:
* 需要当心的WHERE子句
某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子.
在下面的例子里, ‘!=’ 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中.
不使用索引:
SELECT ACCOUNT_NAME
FROM TRANSACTION
WHERE AMOUNT !=0;
使用索引:
SELECT ACCOUNT_NAME
FROM TRANSACTION
WHERE AMOUNT >0;
下面的例子中, ‘||’是字符连接函数. 就象其他函数那样, 停用了索引.
不使用索引:
SELECT ACCOUNT_NAME,AMOUNT
FROM TRANSACTION
WHERE ACCOUNT_NAME||ACCOUNT_TYPE=’AMEXA’;
使用索引:
SELECT ACCOUNT_NAME,AMOUNT
FROM TRANSACTION
WHERE ACCOUNT_NAME = ‘AMEX’
AND ACCOUNT_TYPE=’ A’;
下面的例子中, ‘+’是数学函数. 就象其他数学函数那样, 停用了索引.
不使用索引:
SELECT ACCOUNT_NAME, AMOUNT
FROM TRANSACTION
WHERE AMOUNT + 3000 >5000;
使用索引:
SELECT ACCOUNT_NAME, AMOUNT
FROM TRANSACTION
WHERE AMOUNT > 2000 ;
下面的例子中,相同的索引列不能互相比较,这将会启用全表扫描.
不使用索引:
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’; /*将使用索引*/
现在,假设EMP_TYPE是一个字符类型的索引列.
SELECT …
FROM EMP
WHERE EMP_TYPE = 123
这个语句被ORACLE转换为:
SELECT …
FROM EMP
WHERE TO_NUMBER(EMP_TYPE)=123
这是一个非常实用的规则,请务必牢记
expr
to each search
value one by one. If expr
is equal to a search
, then Oracle Database returns the corresponding result
. If no match is found, then Oracle returns default
. If default
is omitted, then Oracle returns null.例如:
SELECT COUNT(*),SUM(SAL)
FROM EMP
WHERE DEPT_NO = 0020
AND ENAME LIKE ‘SMITH%’;
SELECT COUNT(*),SUM(SAL)
FROM EMP
WHERE DEPT_NO = 0030
AND ENAME LIKE ‘SMITH%’;
你可以用DECODE函数高效地得到相同结果
SELECT COUNT(DECODE(DEPT_NO,0020,’X’,NULL)) D0020_COUNT,
COUNT(DECODE(DEPT_NO,0030,’X’,NULL)) D0030_COUNT,
SUM(DECODE(DEPT_NO,0020,SAL,NULL)) D0020_SAL,
SUM(DECODE(DEPT_NO,0030,SAL,NULL)) D0030_SAL
FROM EMP WHERE ENAME LIKE ‘SMITH%’;
类似的,DECODE函数也可以运用于GROUP BY 和ORDER BY子句中.
select msisdn,imsi,user_type,1 reg_type,city_id,prov_id,create_time
from(
select msisdn,imsi,user_type ,city_id,prov_id,create_time,
row_number()over(partition by msisdn order by create_time desc) r
from UDPAIR_HIS
where udpair_id between id and MIDDLE_ID
)
where r=1;
发表评论
-
高级复制与物化视图的选型
2009-11-07 10:13 3840一、 同步技术的选型 (一) ... -
Timesten for Unix的安装
2009-10-10 17:33 2186下载安装文件 1. 查看系统的具 ... -
多数据库兼容问题
2007-02-23 00:00 1344解决多数据库兼容问题: 解决方案一:(适用于数 ... -
书写历史的甲骨文--ORACLE公司传奇
2007-02-16 00:00 872原文地址:http://www.dbanotes.net/Or ... -
over partition by与group by 的区别
2007-02-09 00:00 2636over partition by与group by 的区别 ... -
ORACLE的锁机制
2007-02-02 00:00 998ORACLE的锁机制 设立封锁机制主要是为了对并发操 ... -
Oracle分区表的优势
2007-01-26 00:00 1828分区表的优势 对于数据库的执行机制还是不大了解,希望专家能通 ... -
RMAN备份命令[转]
2007-01-19 00:00 11721、切换服务器归档模式 ... -
Oracle启动停止命令
2007-01-12 00:00 1530如果未在环境变量中指定实例名,则lsnrctl命令需要指定实例 ... -
Oracle内存结构[转]
2007-01-05 00:00 1100oracle内存结构 SGA:针对系统的内存空 ... -
Oracle日志文件
2006-12-29 00:00 31941.查询系统使用的是哪一组日志文件:select * from ... -
Oracle日志文件使用小结
2006-12-22 00:00 29001:给日志组1增加重做日志文件. SQL> alter ... -
Oracle入门书籍推荐[转]
2006-12-15 00:00 3143很多朋友要我帮忙推荐一下Oracle的入门书籍,能够了解Ora ... -
Oracle优化笔记2
2006-12-08 00:00 1013常用的跟优化有关的数据字典视图 v$sql, ... -
Oracle维护笔记1
2006-11-24 00:00 1158Oracle维护笔记 ·常用的数据字典视图—— ... -
Oracle开发笔记1
2006-11-17 00:00 955常用脚本: --1. 循环插入测试语句: ... -
Oracle学习笔记2
2006-11-10 00:00 926·MERGE INTO的基本语法 MERGE IN ... -
char、varchar、text、ntext、bigint、int、smallint、tinyint和bit的区别及数据库的数据类型
2006-10-20 00:00 1327Varchar 对每个英文(ASCII)字符都占用2个字节,对 ... -
MySQL 笔记
2006-10-13 00:00 686MySQL 笔记 -
SQL Server存储过程的事务实现
2006-10-06 00:00 1324SQL Server存储过程的事务实现
相关推荐
### Oracle优化笔记 #### SQL语句优化 在SQL语句优化方面,主要关注查询效率、减少数据冗余以及提升整体性能。以下几点是常见的优化手段: 1. **使用索引**:合理创建索引可以显著提高查询速度。例如,基于功能的...
资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...
Oracle数据库性能优化是数据库管理员和开发人员日常工作中不可或缺的部分,它涉及到查询优化、资源管理、系统调整等多个方面。本文主要围绕ORACLE数据库的性能优化,特别是如何通过不同的方式来追踪和分析SQL语句的...
再者,李兴华的笔记可能涉及Oracle的性能优化,这包括SQL查询优化、索引优化、数据库参数调优等,这些都是数据库管理员日常工作中不可或缺的部分。他可能分享了如何使用Oracle的 Explain Plan 和 SQL Trace 工具来...
1. **Oracle SQL语法**:SQL(Structured Query Language)是用于管理和操作数据库的标准语言。在Oracle中,SQL用于创建、修改和查询表,以及执行各种数据操作任务。例如,`CREATE TABLE`用于创建新表,`ALTER TABLE...
### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...
总之,Oracle学习笔记精华版是一份全面且深入的学习资料,涵盖了Oracle数据库的关键概念、管理和优化技术,对于任何想要在Oracle领域提升自己的人来说都是宝贵的资源。通过系统学习和实践,读者可以有效地掌握Oracle...
在"Oracle培训笔记2"中,我们可以看到一系列的课程涵盖了XML基础和多行函数的应用,这些都是Oracle数据库管理和开发中的关键知识点。 XML(可扩展标记语言)在Oracle中的应用非常广泛,特别是在数据交换和存储非...
除了上述重点,笔记可能还包含了Oracle的其他重要概念,如索引、触发器、视图、事务管理、备份恢复策略、性能优化技巧等。索引能显著提升查询速度,但过度使用也可能导致写操作变慢;触发器用于在特定事件发生时自动...
ORACLE学习笔记:日常应用、深入管理、性能优化.part1
Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...本书设计了大量的应用情景,介绍了数据库管理员和开发人员常用的管理、维护和优化Oracle 11g数据库的技术和技巧。
Oracle优化笔记 很多很全的优化
Oracle是世界上最广泛使用的数据库管理系统之一,它提供了丰富的功能和组件,包括数据存储、查询优化、安全性、并发控制等。以下是对Oracle学习笔记中提到的一些关键知识点的详细解释: 1. **SQL执行顺序**: SQL...
这篇笔记主要涵盖了Oracle SQL的基础知识、高级特性和实际应用技巧。 一、基础SQL语法 Oracle SQL遵循标准的SQL语法,包括SELECT、INSERT、UPDATE、DELETE四大语句。用于查询数据的基本结构是SELECT字段列表FROM...
1. **Oracle基础知识**:首先,笔记可能会介绍Oracle的基本概念,如数据库架构、表空间、数据块等。这包括数据库的创建、启动和关闭,以及如何管理和维护数据库实例。 2. **SQL语言**:Oracle支持结构化查询语言...
韩顺平Oracle数据库教程笔记涵盖了Oracle数据库的基础知识和高级技术,涵盖了数据类型、查询语句、条件语句、排序语句、分组语句、联结语句、子查询、数据操作、视图、索引、存储过程、触发器、数据库设计、数据库...
在实际操作中,Oracle数据库的管理和开发涉及大量细节和技巧,如性能优化、备份恢复、安全设置等。理解这些基本概念和操作是成为Oracle数据库管理员或开发人员的基础。通过不断学习和实践,可以更好地掌握Oracle...
数据库管理是Oracle教程笔记的重点,包括表空间和数据文件的管理、用户权限和角色的分配、备份与恢复策略、性能优化等。理解这些概念有助于确保数据库的稳定运行和数据的安全性。 在学习过程中,你还需要关注索引的...
3. Oracle数据库的架构和存储结构,例如表空间、段、数据块等概念,对这些基础概念的深入理解对于数据迁移和性能优化至关重要。 4. Oracle的数据备份和恢复技术,因为数据迁移往往需要确保数据的安全性和完整性,...