- 浏览: 1036621 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (501)
- dwr (6)
- javascript (84)
- oracle (66)
- jsp/servlet (18)
- ant (3)
- 基础知识 (12)
- EXT (10)
- My SQL (10)
- java (71)
- spring (37)
- 学习的对象 (2)
- Linux (24)
- 面试 (1)
- HTML/CSS (11)
- tomcat (11)
- 收藏夹 (2)
- Power Designer (2)
- struts.xml配置文件 (1)
- sturts2 (3)
- myeclipse (8)
- eclipse (7)
- Maven (34)
- SVN (3)
- SAP JCO (2)
- JBOSS (11)
- webservice (8)
- word (1)
- 敏捷开发 (1)
- sybase (4)
- Nexus (3)
- EhCache (3)
- log4j (3)
- Cookie (4)
- Session (4)
- CXF (7)
- AXIS (2)
- SSO (1)
- LDAP (1)
- velocity (2)
- Jquery (5)
- redis (2)
- http (4)
- dojo (1)
- Linux资源监控软件mnon的安装与运用 (1)
- notepad++ (1)
- EA (1)
- UML (1)
- JasperReports (1)
- 权限 (0)
- freemarker (4)
- Spring MVC (1)
- JMS (1)
- activeMQ (1)
- hession (3)
- 安全 (1)
- ibatis (2)
- log (1)
- nginx (1)
最新评论
-
winhbb:
我刚好遇到了一个问题(在可以依赖注入的场合有效):有两个模块A ...
解决Maven项目相互依赖/循环依赖/双向依赖的问题 -
nanjiwubing123:
long3ok 写道你好 XmlOutputFormatter ...
用XStream转换复杂XML -
zhoujianboy:
另外一个方法实现eclipse tomcat 热部署:http ...
eclipse下实现maven项目在tomcat容器热部署方法 -
long3ok:
你好 XmlOutputFormatter 请问这个类是在什么 ...
用XStream转换复杂XML -
ganbo:
总结的好,文章给力。
解决Maven项目相互依赖/循环依赖/双向依赖的问题
最近在JavaEye上发现好多同志对sql的优化好像是知道的很少,最近总结了几条仅供参考,不过除少数可能要依情况而定,大多数还是相当有效的。 【注:以下说的(低效)与(高效)都是相当来说的。】 1、Where子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句。 根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。 举例: (低效) select ... from table1 t1 where t1.sal > 300 and t1.jobtype = '0001' and 20 < (select count(*) from table1 t2 where t2.pno = t1.tno; (高效) select ... from table1 t1 where 20 < (select count(*) from table1 t2 where t2.pno = t1.tno and t1.sal > 300 and t1.jobtype = '0001'; 2、Select子句中避免使用 “ * ”: 当你想在select子句中列出所有的column时,使用动态SQL列引用 ‘*' 是一个方便的方法。 不幸的是,这是一个非常低效的方法。 实际上,ORACLE在解析的过程中,会将 '*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。 3、减少访问数据库的次数: 当执行每条SQL语句时,ORACLE在内部执行了许多工作: 解析SQL语句、估算索引的利用率、绑定变量、读数据块等等。 由此可见,减少访问数据库的次数,就能实际上减少ORACLE的工作量。 举例: 题目——我要查找编号为0001、0002学生的信息。 (低效) select name,age,gender,address from t_student where id = '0001'; select name,age,gender,address from t_student where id = '0002'; (高效) select a.name,a.age,a.gender,a.address,b.name,b.age,b.gender,b.address from t_student a,t_student b where a.id = '0001' and b.id = '0002'; 4、使用Decode函数来减少处理时间: 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表。 举例: (低效) select count(*), sum(banace) from table1 where dept_id = '0001' and name like 'anger%'; select count(*), sum(banace) from table1 where dept_id = '0002' and name like 'anger%'; (高效) select count(decode(dept_id,'0001','XYZ',null)) count_01,count(decode(dept_id,'0002','XYZ',null)) count_02, sum(decode(dept_id,'0001',dept_id,null)) sum_01,sum(decode(dept_id,'0002',dept_id,null)) sum_02 from table1 where name like 'anger%'; 5、整合简单,无关联的数据库访问: 如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系) 举例: (低效) select name from table1 where id = '0001'; select name from table2 where id = '0001'; select name from table3 where id = '0001'; (高效) select t1.name, t2.name, t3.name from table1 t1, table2 t2, table3 t3 where t1.id(+) = '0001' and t2.id(+) = '0001' and t3.id(+) = '0001' 【注:上面例子虽然高效,但是可读性差,需要量情而定啊!】 6、删除重复记录: 最高效的删除重复记录方法 ( 因为使用了ROWID) 举例: delete from table1 t1 where t1.rowid > (select min(t2.rowid) from table1 t2 where t1.id = t2.id); 7、尽量不要使用having子句,可以考虑用where替换。 having只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作。 如果能通过where子句限制记录的数目,那就能减少这方面的开销。 8、尽量用表的别名: 当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上。 这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。 9、用exists替代in(发现好多程序员不知道这个怎么用): 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。 在这种情况下,使用exists(或not exists)通常将提高查询的效率。 举例: (低效) select ... from table1 t1 where t1.id > 10 and pno in (select no from table2 where name like 'www%'); (高效) select ... from table1 t1 where t1.id > 10 and exists (select 1 from table2 t2 where t1.pno = t2.no and name like 'www%'); 10、用not exists替代not in: 在子查询中,not in子句将执行一个内部的排序和合并。 无论在哪种情况下,not in都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。 为了避免使用not in,我们可以把它改写成外连接(Outer Joins)或not exists。 11、用exists替换distinct: 当提交一个包含一对多表信息的查询时,避免在select子句中使用distinct. 一般可以考虑用exists替换 举例: (低效) select distinct d.dept_no, d.dept_name from t_dept d, t_emp e where d.dept_no = e.dept_no; (高效) select d.dept_no, d.dept_name from t_dept d where exists (select 1 from t_emp where d.dept_no = e.dept_no); exists使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果. 12、用表连接替换exists: 通常来说,采用表连接的方式比exists更有效率。 举例: (低效) select ename from emp e where exists (select 1 from dept where dept_no = e.dept_no and dept_cat = 'W'); SELECT ENAME (高效) select ename from dept d, emp e where e.dept_no = d.dept_no and dept_cat = 'W'; 13、避免在索引列上使用is null和is not null 避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引。 对于单列索引,如果列包含空值,索引中将不存在此记录; 对于复合索引,如果每个列都为空,索引中同样不存在此记录; 如果至少有一个列不为空,则记录存在于索引中。 举例: 如果唯一性索引建立在表的A列和B列上, 并且表中存在一条记录的A,B值为(123,null), ORACLE将不接受下一条具有相同A,B值(123,null)的记录(插入), 然而如果所有的索引列都为空,ORACLE将认为整个键值为空而空不等于空。 因此你可以插入1000 条具有相同键值的记录,当然它们都是空! 因为空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使ORACLE停用该索引。 14、最好把复杂的sql,去看下它的执行计划,这样有利于你分析知道自己的sql效率如何。
避免在索引列上使用计算
WHERE子句中,如果索引列是函数的一部分,优化器将不使用索引而使用全表扫描. 举例:
1.--低效:
2.SELECT …FROM DEPT WHERE SAL * 12 > 25000;
3.--高效:
4.SELECT … FROM DEPT WHERE SAL > 25000/12;
12. 用>=替代>
1.--如果DEPTNO上有一个索引
2.--高效:
3. SELECT * FROM EMP WHERE DEPTNO >=4
4.--低效:
5. SELECT * FROM EMP WHERE DEPTNO >3
【转载】:http://www.iteye.com/topic/508161
发表评论
-
Oracle强制使用索引
2013-01-25 16:48 5329Oracle强制使用索引: select /*+ INDEX ... -
Oracle if exists(...)
2013-01-22 10:52 1187对于Oracle中没有 if exists(...) 的语法, ... -
oracle 赋debug权限
2013-01-15 15:29 4004pl/sql 报错 不能运行debug 时 ora-0131 ... -
Oracle 10g使用游标更新或删除数据
2013-01-04 16:03 1071在定义又表示必须要带 ... -
oracle 的 CONNECT BY 和START WITH
2013-01-04 15:00 1346在SELECT命令中使用CONNECT BY 和START W ... -
树-Oracle用Start with...Connect By子句递归查询
2013-01-04 14:59 1025Start with...Connect By子句递归查询一般 ... -
java.sql.SQLException: ORA-01436: 用户数据中的 CONNECT BY 循环
2013-01-04 14:55 2248SELECT r1.region_id,parent_id ... -
Oracle创建删除用户、角色、表空间、导入导出、...命令总结
2013-01-03 16:24 1269//创建临时表空间 create temporary ta ... -
ResultSet.getMetaData() 的使用
2012-08-12 11:22 2097java.sql.ResultSet.getMetaData( ... -
ORACLE中如何查找特定对象中的文本内容~
2012-04-30 19:37 1224[c-sharp] view plaincopy SQL> ... -
Oracle 下读取表/字段的备注信息
2012-04-30 19:19 1181Oracle 通过COMMENT ON TABLE / C ... -
nls_sort和nlssort 排序功能介绍
2012-04-23 23:20 11090ALTER SESSION SET NLS_SORT=''; ... -
Oracle 递归查询 树查询 start with connect by prior
2012-02-28 09:52 1079网页地址: http://www.iteye.com/topi ... -
java中oracle特殊字符的查询
2011-10-18 14:38 2384escape:指定某字符为特殊字符: 例如指定‘\’ 为特殊字 ... -
Oracle中的 单引号 和 双引号
2011-10-18 09:17 1280双引号的作用是:假如建立对象的时候,对象名、字段名加双引号,则 ... -
pl/sql case or decode
2011-10-16 00:19 1064SELECT CASE 3 WHEN 1 THEN ... -
Oracle存储过程返回游标 [转载]
2012-04-22 22:09 4630有俩种方法: 一种是声明系统游标,一种是声明自定义游标,然后 ... -
oracle索引表函数(集合函数)(下表为字符串的索引表举例红色)(嵌套表/索引表/可变数组举例绿色)
2011-10-12 11:40 0一、EXISTS函数 1、检测 ... -
pl/sql 集合代码 的遍历方式
2011-10-12 10:22 1461-- Created on 2011-10-12 by HUC ... -
浅谈oracle复合数据类型
2012-04-22 22:10 976--本文档可以直接拷贝运行。 /* oracle复合数 ...
相关推荐
高效率常用的OracleSQL语句.txt
很适合开发人员在编写SQL时注意,这里虽然说是Oracle的优化,其实,很多是标准SQL需要注意的写法。具有非常高的共通性。 1.选用适合的ORACLE优化器 2.HERE子句中的连接顺序 3.通过内部函数提高SQL效率 4.EXISTS与IN...
主要给大家介绍了oracle查看执行最慢与查询次数最多的sql语句,文中给出完整的示例代码,相信对大家的学习或者工作具有一定的参考价值,有需要的朋友们下面来一起看看吧。
实用编程经验。指导如何写出高效率SQL语句。
oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是sql性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖oracle sql优化与调优技术,主要内容包括: 第一篇“执行计划...
Oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是SQL性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖Oracle SQL优化与调优技术,主要内容包括:, 第一篇“执行计划...
资深Oracle DBA黄玮(Fuyuncat)十年磨一剑 深入揭示OracleSQL优化与调优的原理、核心...然后介绍如何对SQL语句进行优化以获得稳定、高效的性能。最后,依据对SQL优化及调优技术的分析,介绍如何快速优化SQL的思路。
Oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是SQL性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖Oracle SQL优化与调优技术,主要内容包括: 第一篇“执行计划”...
没有"高大上"的实战sql语句,结合自己多年工作经验,分享些基础,重要,容易遗漏的 sql语句知识.数据层创建知识.
执行路径:ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用:我们发现,单...当你向ORACLE提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句. 这里需要注明的是,ORACLE对两者采取的是一种严格匹配,要
支持批量SQL语句的运行:用监控器监控每条语句的运行,在运行过程中可以中断/暂停/继续正在运行的语句,甚至可以更正出错误的语句 o 方便高效的块操作,以满足特殊需求: (1)“Format SQL” 按钮能将语句块中...
Oracle语句优化53个规则详解,我从网上看到整理出来的,希望大家养成良好的SQL书写习惯,会让我们受益终身,写出高效率SQL语句
Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习Oracle为提升语言效率而加入的支持特性,进而将两者综合考虑并在工作中加以应用。作者通过总结各自多年的软件开发和教学培训经验,与大家...
监控批量SQL语句的运行(在运行中可暂停、更正);不需要安装 Oracle 客户端;占用系统资 源极少;能运行于所有的主流平台包括 Windows、Linux、Unix 及 Mac OS;多线程多连接。所有这些 功能特性在同类工具中表现...
监控批量SQL语句的运行(在运行中可暂停、更正);不需要安装 Oracle 客户端 ;占用系统资源极少;能运行于所有的主流平台包括 Windows、Linux 、Unix 及 Mac OS; 多线程多连接。所有这些功能特性在同类工具中表现...
1 序言 2 2 影响SQL PERFORMANCE的关键因素和配置: 2 2.1 关于执行计划 2 2.2 ORACLE优化器 2 2.2.1 ORACLE优化器的优化方式 2 2.2.2 优化器的优化模式(Optermizer Mode) 3 ...3.12 识别 “低效运行”的SQL语句 11
(支持格式化多表关联、UNIOIN复杂SQL语句) 12、SQL注释添加。(注释包含字段逻辑名称) 13、SQL转换。(SQL语句和代码、ID和逻辑名称互相转换) 14、一次执行多条SQL语句。 15、代码及文档自定义生成。 16、表、...
<3> 支持多条SQL语句的成批运行,用控制台监控每条语句的运行, 在运行过程中可以中断/暂停/继续正在运行的 SQL,甚至可以更正出错误的 SQL,从而提高操作效率 <4> 支持彩色文本编辑,即关键字、注释块、引号内字符...
直至无法产生新的输出或搜索限额满→对 输出的SQL语句进行过滤,选出具有不同执行计划的SQL语句(即不同的执行效率)→对得到的SQL语句进行批量测试,找出性能最好的SQL语句。图2 优化前的SQL语句 自动优化实例 假设...