1.     减少I/O操作:

SELECT COUNT(CASE WHEN empno>20 THEN 1 END) c1,COUNT(CASE WHEN empno<20 THEN 1 END) c2
FROM emp;
2. 通过rowid访问

SELECT ROWID,emp.* FROM emp
WHERE ROWID=chartorowid('AAAHW7AABAAAMUiAAA')

3.    
使用索引唯一扫描

SELECT empno,ename FROM emp
WHERE empno='2000'

4.    
使用并连接符号会使oracle忽略使用索用,即使是唯一索引

SELECT empno,ename FROM emp
WHERE empno||ename='2000naem'

改成这样就可使用索引了

SELECT * FROM emp
WHERE empno=2000 AND ename='dd'

5.    
索引范围扫描

SELECT * FROM emp
WHERE empno<7000

6where条件子句的解析顺序是从下到上的

SELECT a.empno,b.dname FROM emp a,dept
b
WHERE a.ename<'CLERK'
AND a.deptno=b.deptno;

耗时1.016秒
 
SELECT a.empno,b.dname FROM emp a,dept b
WHERE  a.deptno=b.deptno
AND a.ename<'CLERK';

耗时0.813

7.    
使用通配符会使oracle不去使用索引

SELECT ename FROM emp
WHERE ename LIKE '%C%'

应改成

SELECT ename FROM emp
WHERE ename LIKE 'C%'

8.    
使用唯一索引查找精确值是最快的,而索引范围扫描比较适合查找>=,<=的数据

SELECT a.itemid
FROM   pt_sche_detail a,
       pt_post_role   b
WHERE  a.itemid = b.taskid
AND    a.docid = 2281
AND    a.itemid != 1169015
AND    a.status != 0
AND    b.posttype = 1
AND    b.roleid = 1022
AND    b.roletype = 1

上面的语句改成:

SELECT a.itemid
FROM   pt_sche_detail a,
       pt_post_role   b
WHERE  a.itemid = b.taskid
AND    a.docid = 2281
AND    a.itemid != 1169015
AND    a.status != 0
AND    b.taskid IN
       (SELECT itemid
         FROM   pt_sche_detail temp
         WHERE  temp.docid = 2281
         AND    rownum <= (SELECT COUNT(itemid)
FROM pt_sche_detail temp WHERE temp.docid = 2281))
AND    b.roleid = 1022
AND    b.roletype = 1
AND    b.posttype = 1

oracle+SQL优化实例的更多相关文章

  1. Oracle SQL优化[转]

    Oracle SQL优化 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化 ...

  2. mysql sql优化实例

    mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B ...

  3. oracle sql 优化大全

    转自: http://panshaobinsb.iteye.com/blog/1718233 http://yulimeander.blog.sohu.com/115850824.html 最近遇到了 ...

  4. Oracle SQL 优化规则

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...

  5. Oracle SQL 优化原则(实用篇)

    由于SQL优化优化起来比较复杂,并且还受环境限制,在开发过程中,写SQL必须遵循以下几点原则: 1.Oracle 采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他Where ...

  6. oracle sql优化

    整理一下网上所看到sql优化方法 1.使用大写字母书写sql,因为oracle解释器会先将sql语句转换成大写后再解释 2    减少访问数据库的次数,多数情况下一条sql可以达到目的的,就不要使用多 ...

  7. Oracle SQL优化一(常见方法)

    1.表访问方式优化: a)普通表优先“Index Lookup 索引扫描”,避免全表扫描 大多数场景下,通过“Index Lookup 索引扫描”要比“Full Table Scan (FTS) 全表 ...

  8. oracle sql优化笔记

    oracle优化一般分为:1.sql优化(现在oracle都会根据sql语句先进行必要的优化处理,这种应该用户不大了,但是像关联和嵌套查询肯定是和影响性能的) A.oracle的sql语句的条件是从右 ...

  9. Oracle SQL优化器简介

    目录 一.Oracle的优化器 1.1 优化器简介 1.2 SQL执行过程 二.优化器优化方式 2.1 优化器的优化方式 2.2 基于规则的优化器 2.3 基于成本的优化器 三.优化器优化模式 3.1 ...

随机推荐

  1. Microsoft.VisualStudio.DebuggerVisualizers.dll 文件位置 for VisualStudio 2015

    可视化调试工具(Microsoft.VisualStudio.DebuggerVisualizers) "C:\Program Files (x86)\Microsoft Visual St ...

  2. Elasticsearch的javaAPI之query dsl-queries

    Elasticsearch的javaAPI之query dsl-queries 和rest query dsl一样,elasticsearch提供了一个完整的Java query dsl. 查询建造者 ...

  3. 【ACM】Fighting for HDU

    #include <stdio.h> #include <stdlib.h> #define max 100 /* run this program using the con ...

  4. WIN7如何替换开机登录画面

    1 把你的图片保存为backgroundDefault.jpg,并确保和你的屏幕分辨率相同 2 把下面的代码另存为@开启自定义登录界面.reg(注意格式为ASCII格式) Windows Regist ...

  5. gcc编译选项汇集

    gcc -g 调试选项(DEBUGGING OPTION)GNU CC拥有许多特别选项,既可以调试用户的程序,也可以对GCC排错: -g 以操作系统的本地格式(stabs, COFF, XCOFF,或 ...

  6. docker中的link

    一.查看容器的详细情形 docker inspect 容器id/名称 二.为什么要用link 容器每次重启时,ip都会变动,这不利于前端引用中连接数据库. 三.link docker run -p 8 ...

  7. 算法笔记_076:蓝桥杯练习 结点选择(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多 ...

  8. 算法笔记_070:BellmanFord算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 具体编码   1 问题描述 何为BellmanFord算法? BellmanFord算法功能:给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶 ...

  9. WebDriver API——第3部分Action Chains

    The ActionChains implementation, class selenium.webdriver.common.action_chains.ActionChains(driver) ...

  10. C/C++中float和double的存储结构(转)

    在C/C++中float是32位的,double是64位的,两者在内存中的存储方式和能够表示的精度均不同,目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算. ...