我爱Aspx >> C#.Net >> ORACLE优化器 _数据库技巧避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销.
例如:
低效:
SELECT REGION,AVG(LOG_SIZE)
FROM LOCATION
GROUP BY REGION
HAVING REGION REGION != ‘SYDNEY’
AND REGION != ‘PERTH’
高效
SELECT REGION,AVG(LOG_SIZE)
FROM LOCATION
WHERE REGION REGION != ‘SYDNEY’
AND REGION != ‘PERTH’
GROUP BY REGION
(译者按: HAVING 中的条件一般用于对一些集合函数的比较,如COUNT() 等等. 除此而外,一般的条件应该写在WHERE子句中)
15. 减少对表的查询
在含有子查询的SQL语句中,要特别注意减少对表的查询.
例如:
低效
SELECT TAB_NAME
FROM TABLES
WHERE TAB_NAME = ( SELECT TAB_NAME
FROM TAB_COLUMNS
WHERE VERSION = 604)
AND DB_VER= ( SELECT DB_VER
FROM TAB_COLUMNS
WHERE VERSION = 604)
高效
SELECT TAB_NAME
FROM TABLES
WHERE (TAB_NAME,DB_VER)
= ( SELECT TAB_NAME,DB_VER)
FROM TAB_COLUMNS
WHERE VERSION = 604)
Update 多个Column 例子:
低效:
UPDATE EMP
SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES),
SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES)
WHERE EMP_DEPT = 0020;
高效:
UPDATE EMP
SET (EMP_CAT, SAL_RANGE)
= (SELECT MAX(CATEGORY) , MAX(SAL_RANGE)
FROM EMP_CATEGORIES)
WHERE EMP_DEPT = 0020;
16. 通过内部函数提高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
Ҷƪл˵?
优化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]