- 浏览: 264384 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
cuiqi4016:
正在做json转换的功能,帮大忙了,感谢博主分享
java 通过反射获取泛型的类型 -
cxshun:
写得很好,感谢博主的分享
java 通过反射获取泛型的类型 -
joy3229233:
[url][/url][flash=200,200][/fla ...
(转)flex checkbox 选中 -
linkagebest:
盗版可耻。。。。。
(转)flex checkbox 选中 -
shuai0420:
...
flex数据绑定
1. SELECT子句中避免使用 “*”
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将“*” 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间.
2.使用DECODE函数来减少处理时间
使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. 例如:
3.删除重复记录
最高效的删除重复记录方法 ( 因为使用了ROWID)
4. 用TRUNCATE替代DELETE
当删除表中的记录时,在通常情况下,回滚段(rollback segments ) 用来存放可以被恢复的信息,如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况),而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短.
5.计算记录条数
和一般的观点相反, count(*) 比count(1)稍快 ,当然如果可以通过索引检索,对索引列的计数仍旧是最快的. 例如 COUNT(EMPNO)
6.用Where子句替换HAVING子句
避免使用HAVING子句,HAVING 只会在检索出所有记录之后才对结果集进行过滤,这个处理需要排序、总计等操作,如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销, 例如:
7. 用EXISTS替代IN
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率.
8.用NOT EXISTS替代NOT IN
在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS. 例如:
SELECT …FROM EMP WHERE DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPT WHERE DEPT_CAT=’A’);
9.用EXISTS替换DISTINCT
当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换
例如:
10. 用索引提高效率
索引是表的一个概念部分,用来提高检索数据的效率,实际上ORACLE使用了一个复杂的自平衡B-tree结构,通常通过索引查询数据比全表扫描要快,当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引, 同样在联结多个表时使用索引也可以提高效率,另一个使用索引的好处是,它提供了主键(primary key)的唯一性验证,除了那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 通常, 在大型表中使用索引特别有效. 当然,你也会发现, 在扫描小表时,使用索引同样能提高效率,虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价. 索引需要空间来存储,也需要定期维护,每当有记录在表中增减或索引列被修改时,索引本身也会被修改,这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O, 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢
注:定期的重构索引是有必要的.
11. 避免在索引列上使用计算
WHERE子句中,如果索引列是函数的一部分,优化器将不使用索引而使用全表扫描. 举例:
12. 用>=替代>
两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录.
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将“*” 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间.
2.使用DECODE函数来减少处理时间
使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. 例如:
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子句中.
3.删除重复记录
最高效的删除重复记录方法 ( 因为使用了ROWID)
DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO);
4. 用TRUNCATE替代DELETE
当删除表中的记录时,在通常情况下,回滚段(rollback segments ) 用来存放可以被恢复的信息,如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况),而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短.
5.计算记录条数
和一般的观点相反, count(*) 比count(1)稍快 ,当然如果可以通过索引检索,对索引列的计数仍旧是最快的. 例如 COUNT(EMPNO)
6.用Where子句替换HAVING子句
避免使用HAVING子句,HAVING 只会在检索出所有记录之后才对结果集进行过滤,这个处理需要排序、总计等操作,如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销, 例如:
--低效 SELECT REGION,AVG(LOG_SIZE) FROM LOCATION GROUP BY REGION HAVING REGION != ‘SYDNEY’ AND REGION != ‘PERTH’ --高效 SELECT REGION,AVG(LOG_SIZE) FROM LOCATION WHERE REGION != ‘SYDNEY’ AND REGION != ‘PERTH’ GROUP BY REGION
7. 用EXISTS替代IN
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率.
--低效 SELECT * FROM EMP WHERE EMPNO > 0 AND DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB’) --高效: SELECT * FROM EMP WHERE EMPNO > 0 AND EXISTS (SELECT ‘X’ FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB’)
8.用NOT EXISTS替代NOT IN
在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS. 例如:
SELECT …FROM EMP WHERE DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPT WHERE DEPT_CAT=’A’);
--为了提高效率改写为: (方法一: 高效) SELECT ….FROM EMP A,DEPT B WHERE A.DEPT_NO = B.DEPT(+) AND B.DEPT_NO IS NULL AND B.DEPT_CAT(+) = ‘A’ -- (方法二: 最高效) SELECT ….FROM EMP E WHERE NOT EXISTS (SELECT ‘X’ FROM DEPT D WHERE D.DEPT_NO = E.DEPT_NO AND DEPT_CAT = ‘A’);
9.用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核心模块将在子查询的条件一旦满足后,立刻返回结果.
10. 用索引提高效率
索引是表的一个概念部分,用来提高检索数据的效率,实际上ORACLE使用了一个复杂的自平衡B-tree结构,通常通过索引查询数据比全表扫描要快,当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引, 同样在联结多个表时使用索引也可以提高效率,另一个使用索引的好处是,它提供了主键(primary key)的唯一性验证,除了那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 通常, 在大型表中使用索引特别有效. 当然,你也会发现, 在扫描小表时,使用索引同样能提高效率,虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价. 索引需要空间来存储,也需要定期维护,每当有记录在表中增减或索引列被修改时,索引本身也会被修改,这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O, 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢
注:定期的重构索引是有必要的.
11. 避免在索引列上使用计算
WHERE子句中,如果索引列是函数的一部分,优化器将不使用索引而使用全表扫描. 举例:
--低效: SELECT …FROM DEPT WHERE SAL * 12 > 25000; --高效: SELECT … FROM DEPT WHERE SAL > 25000/12;
12. 用>=替代>
--如果DEPTNO上有一个索引 --高效: SELECT * FROM EMP WHERE DEPTNO >=4 --低效: SELECT * FROM EMP WHERE DEPTNO >3
两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录.
发表评论
-
oracle 设置SGA
2013-03-14 11:12 1074SQL> show parameter sga; ... -
oracle sequence
2012-03-23 13:35 1018create or replace procedure p_c ... -
oracle 触发器
2012-03-23 13:11 1082触发器是指存放在数据库中,并被隐藏执行的存储过程。在Oracl ... -
两个经典的Oracle触发器示例 .
2012-03-23 11:48 1153【案例一】 题目: --触发器: --添加员工信息,流水号作 ... -
oracle sql 优化
2011-06-07 15:53 1228Oracle SQL的优化规则: 尽量少用IN操作符,基本 ... -
查看一个函数被哪些存储过程调用
2011-02-28 14:37 1565查看一个函数被哪些存储过程调用: select * from ... -
oracle 存储过程的基本语法
2010-11-05 15:59 10881.基本结构 CREATE OR REPLACE PROCE ... -
oracle存储过程,游标及循环应用实例
2010-07-21 14:45 1566最近在项目中做了一个关于系统与系统之间数据同步的业务,之前使用 ... -
oracle中用START WITH...CONNECT BY PRIOR子句实现递归查询
2010-05-26 11:24 893今天发现在oracle中的select语句可以用START W ... -
ArcSDE系统表的说明
2010-02-01 17:09 1400当基于Oracle或是SQL Server安装ArcSde后, ... -
(转)Oracle常用数据字典的查询使用方法
2010-01-14 16:40 1012查看当前用户的缺省表空间 SQL>select use ... -
(转)PL/SQL存储过程编程
2010-01-14 16:34 1764PL/SQL存储过程编程(上) ... -
(转)hibernate中是否支持postgis函数的问题
2010-01-13 16:08 1789今天上午一位朋友问到了,关于hibernate中是否支持pos ... -
oracle 分页语句
2010-01-06 17:28 852select * from (select a.*, ro ... -
数据库设计5步骤
2009-12-23 16:43 819数据库设计5步骤 ... -
数据库设计
2009-12-23 10:07 903说到数据库,我认为不 ... -
oracle 优化
2009-11-25 15:36 965Oracle的优化器有两种优 ... -
oracle 字段类型
2009-11-13 16:49 1080Char 用于描述定长的字符型数据,长度<=2000字节 ... -
oracle PROCEDURE
2009-11-13 16:13 2991.基本结构 CREATE OR REPLACE PROCED ... -
通过一个实际的例子学习Oracle存储过程
2009-11-10 18:10 1504--创建存储过程 CREATE OR REPLACE PROC ...
相关推荐
以下是一些关于Oracle常用SQL技巧的经典要点: 1. **避免在SELECT子句中使用“*”**:在SQL查询中,使用通配符“*”代表选择所有列,虽然方便但效率低下。Oracle在解析时需要查询数据字典获取所有列名,增加了额外...
本文将基于"oracle常用sql整理"的主题,深入探讨Oracle SQL的一些核心概念、语句及其实用技巧,适合初级到中级水平的学习者。 一、SQL基础 SQL是标准化的查询语言,分为DDL(Data Definition Language)、DML(Data...
以下是一些常用的Oracle SQL查询,这些查询涵盖了从基础的表空间信息到复杂的数据库对象状态和性能监控。 1. **查看表空间的名称及大小**: 这个查询通过`dba_tablespaces`和`dba_data_files`视图获取每个表空间的...
总之,“oracle常用经典sql查询.rar”这个压缩包提供了丰富的Oracle SQL查询知识,涵盖了从基础到高级的多种查询技巧。通过学习这些内容,用户可以提升在Oracle数据库中的数据处理能力,更好地服务于业务需求和数据...
二、Oracle常用SQL查询 1. **选择查询(SELECT)**: - 基本查询:`SELECT column1, column2 FROM table;` - 条件查询:`WHERE`子句,如`WHERE column = value`。 - 排序查询:`ORDER BY`子句,如`ORDER BY ...
oracle常用操作技巧,包括oracle安装步骤、网络配制、EM、备份、RMAN的备份与恢复、逻辑备份、闪回、ASM(管理存储软件)、数据迁移、安全控制、oracle安装及常规操作、SQL语句、函数、SQL语句、权限、体系结构、空间...
以上只是"oracle常用监控SQL语句集合"中的一部分内容,实际文档可能还包含更多实用的查询语句和技巧,帮助用户深入理解Oracle数据库的运行机制,提升数据库管理和性能优化的能力。学习并熟练运用这些SQL语句,将极大...
4. **SQL快速参考**:此文档为快速查阅手册,提供了SQL常用命令和语法的简洁概览,适合日常开发和查询时快速查找所需信息。包括基本的查询构造、数据过滤、排序、分组、聚合函数以及如何处理日期和时间等。 学习...
首先,"oracle常用经典sql查询.doc"很可能包含了各种常见的SQL查询语句,这些语句对于理解和掌握Oracle SQL的基础至关重要。这可能包括了如何选择(SELECT)、插入(INSERT)、更新(UPDATE)和删除(DELETE)数据,...
本文件"oracle常用SQL语句(汇总版)"将对Oracle中的常用SQL语法进行详尽阐述。 1. 数据查询: - `SELECT`语句:这是SQL中最基本的查询语句,用于从表中检索数据。例如,`SELECT * FROM 表名;`将返回表中的所有记录...
本文将深入探讨"Oracle常用SQL 1"这一主题,主要关注如何有效地使用SQL语句进行数据操作。 1. **查询基础** - `SELECT`语句:这是SQL中最基本的语句,用于从表中检索数据。例如,`SELECT * FROM table_name;`会...
以下是一些Oracle常用的经典SQL查询知识点,这些知识将帮助你更高效地操作Oracle数据库。 1. **基本查询操作**: - `SELECT`语句:用于从表中选择数据,如`SELECT column1, column2 FROM table_name;` - `WHERE`...
### Oracle DBA 数据库日常维护手册:常用SQL脚本解析 在IT行业中,数据库的高效稳定运行对于企业的业务连续性和数据安全至关重要。Oracle作为全球领先的数据库管理系统之一,其日常维护工作是确保系统性能、安全与...
这些知识点涵盖了从基本的表空间、数据文件管理到更高级的回滚段、控制文件等查询技巧,对于希望成为Oracle DBA(数据库管理员)的专业人士来说是必备的基础技能。 ### 1. 查询表空间总大小 **知识点:** 表空间是...
本专题将深入探讨几个在Oracle中常用的SQL特性,包括行列转化、MERGE INTO语句、CASE表达式、ROWNUM伪列以及分析函数。这些知识点不仅在日常开发中频繁使用,也是面试中常被问及的技能点。 首先,我们来看行列转化...
Oracle存储过程常用技巧 Oracle存储过程是一种强大的数据库对象,它可以帮助开发者简化复杂的业务逻辑,并提高数据库的安全性和性能。在 Oracle 中,存储过程是一种特殊的 PL/SQL 程序,它可以接受输入参数,执行...
Oracle SQL 是 Oracle 数据库的核心组成部分之一,它不仅支持标准 SQL 语法,还包含了许多高级功能和优化技巧。熟练掌握 Oracle SQL 可以帮助开发者更有效地管理和利用数据库资源。通过实践上述示例和技巧,您可以更...