Oracle SQL性能优化系列学习二
SELECT A.EMP_NAME , A.SALARY , A.GRADE,
5. WHERE子句中的连接顺序.
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
6. SELECT子句中避免使用 ‘ * ‘
表 TAB1 16,384 条记录
例如:
例如, 以下有三种方法可以检索出雇员号等于0342或0291的职员.
AND 25 < (SELECT COUNT(*) FROM EMP
LOCATION L ,
CLOSE C1;
…..
例如: (低效,执行时间156.3秒)
FROM EMP E
END;
方法2 (次低效)
选择TAB2作为基础表 (最好的方法)
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.
FETCH C1 INTO …,..,.. ;
WHERE 25 < (SELECT COUNT(*) FROM EMP
AND JOB = ‘MANAGER';
SELECT …
OPEN C1(291);
FROM EMP
CATEGORY C,
方法1 (最低效)
SELECT *
表 TAB2 1 条记录
WHERE MGR=E.EMPNO)
AND E.CAT_NO = C.CAT_NO
SELECT EMP_NAME , SALARY , GRADE
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*' 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间.
正在看的ORACLE教程是:Oracle SQL性能优化系列学习二。
SELECT *
FROM EMP E ,
WHERE MGR=E.EMPNO);
SELECT EMP_NAME,SALARY,GRADE
AND SAL > 50000
(高效,执行时间10.6秒)
B.EMP_NAME , B.SALARY , B.GRADE
WHERE EMP_NO = 342;
WHERE E.EMP_NO BETWEEN 1000 AND 2000
FROM EMP
WHERE EMP_NO = E_NO;
FROM EMP
FROM EMP A,EMP B
当执行每条SQL语句时, ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等等. 由此可见, 减少访问数据库的次数 , 就能实际上减少ORACLE的工作量.
WHERE E.CAT_NO = C.CAT_NO
7. 减少访问数据库的次数
EMP E
AND B.EMP_NO = 291;
例如:
AND JOB = ‘MANAGER'
CATEGORY C
CURSOR C1 (E_NO NUMBER) IS
BEGIN
4. 选择最有效率的表名顺序(只在基于规则的优化器中有效)
FETCH C1 INTO …,..,.. ;
WHERE A.EMP_NO = 342
WHERE SAL > 50000
FROM EMP E
如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.
将比下列SQL更有效率
FROM LOCATION L ,
select count(*) from tab2,tab1 执行时间26.09秒
方法3 (高效)
select count(*) from tab1,tab2 执行时间0.96秒
SELECT …
SELECT EMP_NAME , SALARY , GRADE
注DECLARE
EMP表描述了LOCATION表和CATEGORY表的交集.
选择TAB2作为基础表 (不佳的方法)
OPEN C1(342);
AND E.EMP_NO BETWEEN 1000 AND 2000
AND E.LOCN = L.LOCN
AND E.LOCN = L.LOCN
WHERE EMP_NO = 291;
相关热词: oracle
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/oracle/1940.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
Window下Oracle Database 11g 发行
时间:2020-12-29
-
Oracle如何实现like多个值的
时间:2020-12-29
-
maven添加oracle依赖失败问题
时间:2020-12-29
-
OracleRAC基本概念及入门
时间:2020-12-29
-
Azure File Storage 基本用法
时间:2020-12-26
-
Oracle 权限(grant revoke)
时间:2020-12-26
-
Azure Queue Storage 基本用法
时间:2020-12-26
-
如何对比迁移前后的Orac
时间:2020-12-26
热门文章
-
Azure Queue Storage 基本用法 Azure Storage 之
时间:2020-12-26
-
Oracle存储过程编程详解
时间:2020-12-07
-
win10下oracle 11g安装图文教程
时间:2020-12-25
-
oracle 数据库学习 基本结构介绍
时间:2020-12-13
-
Azure File Storage 基本用法 Azure Storage 之 F
时间:2020-12-26
-
windows使用sqlpus连接oracle 数据库的教程图
时间:2020-12-25
-
Window下Oracle Database 11g 发行版2安装教程
时间:2020-12-29
-
Oracle解锁的方式介绍
时间:2020-12-14
-
linux下oracle设置开机自启动实现方法
时间:2020-12-13
-
Oracle学习记录之使用自定义函数和触发器
时间:2020-12-07
