Oracle中SQL的性能优化
 SELECT * FROM
EMP (基础表)
 SELECT * FROM
EMP (基础表)  WHERE
EMPNO > 0 AND EXISTS (SELECT
‘X'
 WHERE
EMPNO > 0 AND EXISTS (SELECT
‘X'  FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO
 FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO  AND LOC = ‘MELB')
 AND LOC = ‘MELB') 
 
 
 
 SELECT REGION,AVG(LOG_SIZE)FROM LOCATION
 SELECT REGION,AVG(LOG_SIZE)FROM LOCATION
 GROUP
BY REGION HAVING REGION
REGION != ‘SYDNEY'
 GROUP
BY REGION HAVING REGION
REGION != ‘SYDNEY'  AND REGION != ‘PERTH'
 AND REGION != ‘PERTH' 
 SELECT REGION,AVG(LOG_SIZE) FROM LOCATION
 SELECT REGION,AVG(LOG_SIZE) FROM LOCATION
 WHERE
REGION REGION != ‘SYDNEY' AND REGION
!= ‘PERTH'
 WHERE
REGION REGION != ‘SYDNEY' AND REGION
!= ‘PERTH'  GROUP
BY REGION
 GROUP
BY REGION 
 
 
 
 
 
 SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT
D,EMP E
 SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT
D,EMP E  WHERE
D.DEPT_NO = E.DEPT_NO
 WHERE
D.DEPT_NO = E.DEPT_NO
 
 SELECT DEPT_NO,DEPT_NAME FROM DEPT
D WHERE EXISTS ( SELECT ‘X'
 SELECT DEPT_NO,DEPT_NAME FROM DEPT
D WHERE EXISTS ( SELECT ‘X'
 FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO);
 FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO);
 
5、用UNION替换OR (适用于索引列)
 
 
 
 SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION
 SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION
 WHERE
LOC_ID = 10 UNION SELECT LOC_ID
, LOC_DESC , REGION
 WHERE
LOC_ID = 10 UNION SELECT LOC_ID
, LOC_DESC , REGION  FROM
LOCATION WHERE REGION = “MELBOURNE”
 FROM
LOCATION WHERE REGION = “MELBOURNE” 
 SELECT LOC_ID , LOC_DESC , REGION
 SELECT LOC_ID , LOC_DESC , REGION  FROM
LOCATION WHERE LOC_ID = 10 OR REGION = “MELBOURNE”
 FROM
LOCATION WHERE LOC_ID = 10 OR REGION = “MELBOURNE”
 
 
 
 
 SELECT….FROM
LOCATION WHERE LOC_ID = 10
 SELECT….FROM
LOCATION WHERE LOC_ID = 10  OR LOC_ID = 20 OR LOC_ID = 30
 OR LOC_ID = 20 OR LOC_ID = 30 
 
 SELECT…
 SELECT…  FROM
LOCATION WHERE LOC_IN IN (10,20,30);
 FROM
LOCATION WHERE LOC_IN IN (10,20,30); 
 
 
 SELECT …
 SELECT …  FROM
EMP E WHERE SAL > 50000 AND JOB
= ‘MANAGER'
 FROM
EMP E WHERE SAL > 50000 AND JOB
= ‘MANAGER'  AND 25 < (SELECT COUNT(*) FROM EMP
WHERE MGR=E.EMPNO);
 AND 25 < (SELECT COUNT(*) FROM EMP
WHERE MGR=E.EMPNO);  
 
 
 SELECT … FROM
EMP E WHERE 25 < (SELECT
COUNT(*)
FROM EMP
 SELECT … FROM
EMP E WHERE 25 < (SELECT
COUNT(*)
FROM EMP  WHERE
MGR=E.EMPNO) AND SAL
> 50000 AND JOB
= ‘MANAGER';
 WHERE
MGR=E.EMPNO) AND SAL
> 50000 AND JOB
= ‘MANAGER';
 
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号