我爱Aspx >> C#.Net >> ORACLE优化器 _数据库技巧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 EMPNO=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往往牺牲了执行效率. 能够掌握上面的运用函数解决问题的方法在实际工作中是非常有意义的)
17. 使用表的别名(Alias)
当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.
(译者注: Column歧义指的是由于SQL中不同的表具有相同的Column名,当SQL语句中出现这个Column时,SQL解析器无法判断这个Column的归属)
18. 用EXISTS替代IN
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率.
低效:
SELECT *
FROM EMP (基础表)
WHERE EMPNO > 0
AND DEPTNO IN (SELECT DEPTNO
FROM DEPT
WHERE LOC = ‘MELB’)
高效:
SELECT *
FROM EMP (基础表)
Ҷƪл˵?
优化Oracle库表设计的若干方法_数..[04-28]
用多活动结果集优化ADO.NET2.0数..[04-28]
ORACLE SQL性能优化系列(一)_数..[04-28]
ORACLE SQL性能优化系列(二)_数..[04-28]
ORACLE SQL性能优化系列(三)_数..[04-28]
ORACLE SQL性能优化系列(四)_数..[04-28]
ORACLE SQL性能优化系列(五)_数..[04-28]
ORACLE SQL性能优化系列(六)_数..[04-28]
ORACLE SQL性能优化系列(七) _数..[04-28]
ORACLE SQL性能优化系列(八)_数据..[04-28]
优化Oracle库表设计的若干方法_数..[04-28]
用多活动结果集优化ADO.NET2.0数..[04-28]
ORACLE SQL性能优化系列(一)_数..[04-28]
ORACLE SQL性能优化系列(二)_数..[04-28]
ORACLE SQL性能优化系列(三)_数..[04-28]
ORACLE SQL性能优化系列(四)_数..[04-28]
ORACLE SQL性能优化系列(五)_数..[04-28]
ORACLE SQL性能优化系列(六)_数..[04-28]
ORACLE SQL性能优化系列(七) _数..[04-28]
ORACLE SQL性能优化系列(八)_数据..[04-28]