Oracle数据库使用过程中,有一些技巧是使用过程中需要去了解和掌握的,掌握这些技巧我们在以后使用数据库的过程中就可以避免走很多弯路,提高查询效率。本文主要介绍一下七点技巧,希望能对各位有所帮助,接下来我们就一一介绍。
使用技巧:
1. procedure和function中的select后面不要跟变量,否则会极大的波及SQL效率。
2. TRUNCATE 在procedure中无法利用,可写成:
- EXECUTE IMMEDIATE 'truncate table smic_rtd_bullet_lot_tmp';
3. 当运行DML(数据垄断语言,增删改查)语句时,PL/SQL敞开一个内建游标并处理收获,游标是维护查询收获的内存中的一个区域,游标在运行DML语句时敞开,告终后关闭。隐式游标只利用SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT三个属性。SQL%FOUND, SQL%NOTFOUND是布尔值,SQL%ROWCOUNT是整数值。告终循环时能够此作为退出循环的推断规范。
4. 为了不重复解析雷同的SQL语句,在第顺次解析尔后,ORACLE将SQL语句储藏在内存中。这块位于系统大局区域SGA(system global area)的分享池(shared buffer pool)中的内存能够被所有的数据库用户分享。因而,当你厉行一个SQL语句(有时被称为一个游标)时,万一它和之前的厉行过的语句全面雷同,ORACLE就能很快获得曾经被解析的语句以及良好的厉行路径。分享的语句定然中意三个条件:
a. 字符级的比拟:目前被厉行的语句和分享池中的语句定然全面雷同。包括所有的空格和字母大小写。
b. 两个语句所指的对象定然全面雷同。例如两个用户对于统一个表,一个是table owner,一个是引用同义词,那么是无法SQL分享的。
c. 两个SQL语句中定然利用雷同的名字的绑定变量。凡是变量名字雷同,即便在运行时,赋于不同的绑定变量雷同的值也是能够的。
统一SQL在一个session多处利用,万一多次改变,经常因为空格和字母大小写不统一导致SQL未曾分享。利用 WITH a AS (SELECT * FROM ……) 将查询命名为a,尔后能够将a当做SQL利用,能够确保顺次解析多次利用,能够长进效率。
5. 凡是有可能,在过程中尽量多利用COMMIT,这么过程的功能获得长进,需求也会因为COMMIT所释放的资源而收缩:
COMMIT所释放的资源:
a. 回滚段上用于复如数据的消息。
b. 被过程语句获得的锁。
c. redo log buffer 中的空间。
d. ORACLE为管教上述3种资源中的内部花费。
在利用COMMIT时定然要当心到事务的全面性,切实中效率和事务全面性经常是鱼和熊掌不可得兼。
6. 穿越内部函数长进SQL效率。
- SELECT H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC,COUNT(*)
- FROM HISTORY_TYPE T,EMP E,EMP_HISTORY H
- WHERE H.EMPNO = E.EMPNO
- AND H.HIST_TYPE = T.HIST_TYPE
- GROUP BY H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC;
穿越调用下面的函数能够长进效率。
- FUNCTION LOOKUP_HIST_TYPE(TYP IN NUMBER) RETURN VARCHAR2
- AS
- TDESC VARCHAR2(30);
- CURSOR C1 IS
- SELECT TYPE_DESC
- FROM HISTORY_TYPE
- WHERE HIST_TYPE = TYP;
- BEGIN
- OPEN C1;
- FETCH C1 INTO TDESC;
- CLOSE C1;
- RETURN (NVL(TDESC,尼康镜头’?’));
- END;
- FUNCTION LOOKUP_EMP(EMP IN NUMBER) RETURN VARCHAR2
- AS
- ENAME VARCHAR2(30);
- CURSOR C1 IS
- SELECT ENAME
- FROM EMP
- WHERE EMPEMPNO=EMP;
- BEGIN
- OPEN C1;
- FETCH C1 INTO ENAME;
- CLOSE C1;
- RETURN (NVL(ENAME,’?’));
- END;
- SELECT H.EMPNO,婴儿奶粉排行榜LOOKUP_EMP(H.EMPNO),
- H.HIST_TYPE,LOOKUP_HIST_TYPE(H.HIST_TYPE),COUNT(*)
- FROM EMP_HISTORY H
- GROUP BY H.EMPNO , H.HIST_TYPE;
许多人适应性想用一个SQL写出必需的数据,殊不知混杂的SQL经常献身了厉行效率。 能够掌握上面的利用函数处理问题的措施在切实工作中是极其故含义的。
7. 通常情形下,用UNION轮换WHERE子句中的OR将会起到较好的收获。对索引列利用OR将造成全表扫描。当心,以上法定只针对多个索引列管用。万一有column未曾被索引,查询效率可能会因为你未曾抉择OR而减退。
关于Oracle数据库的使用技巧就介绍到这里,如果您想了解更多关于Oracle数据库的知识,不妨看一下这里的文章:http://database.51cto.com/oracle/,相信会给各位带来收获的!
【编辑推荐】