49. 优化GROUP BY
提高GROUP BY 语句的效率,可以通过将不需要的记录在GROUP BY 之前过滤掉。下面两个查询返回相同结果但第二个明显就快了许多。
低效:
SELECT JOB , AVG(SAL)
FROM EMP
GROUP by JOB
HAVING JOB = ‘PRESIDENT’
OR JOB = ‘MANAGER’
高效:
SELECT JOB , AVG(SAL)
FROM EMP
WHERE JOB = ‘PRESIDENT’
OR JOB = ‘MANAGER’GROUP by JOB
译者按:本节和14节相同。可略过。
50. 使用日期当
使用日期是,需要注意如果有超过5位小数加到日期上,这个日期会进到下一天!
例如:
1.
SELECT TO_DATE(‘01-JAN-93’+.99999)
FROM DUAL;
Returns:“01-JAN-93 23:59:59‘
2.
SELECT TO_DATE(’01-JAN-93‘+.999999)
FROM DUAL;
Returns:“02-JAN-93 00:00:00‘
译者按:虽然本节和SQL性能优化没有关系,但是作者的功力可见一斑
51. 使用显式的游标(CURSORs)
使用隐式的游标,将会执行两次操作。第一次检索记录,第二次检查TOO MANY ROWS 这个exception . 而显式游标不执行第二次操作。
52. 优化EXPORT和IMPORT
使用较大的BUFFER(比如10MB , 10,240,000)可以提高EXPORT和IMPORT的速度。
ORACLE将尽可能地获取你所指定的内存大小,即使在内存不满足,也不会报错。这个值至少要和表中最大的列相当,否则列值会被截断。
译者按:可以肯定的是,增加BUFFER会大大提高EXPORT , IMPORT的效率。(曾经碰到过一个CASE,增加BUFFER后,IMPORT/EXPORT快了10倍!)
作者可能犯了一个错误:“这个值至少要和表中最大的列相当,否则列值会被截断。”其中最大的列也许是指最大的记录大小。
关于EXPORT/IMPORT的优化,优快云论坛中有一些总结性的贴子,比如关于BUFFER参数, COMMIT参数等等,详情请查。
53. 分离表和索引
总是将你的表和索引建立在不同的表空间内(TABLESPACES)。决不要将不属于ORACLE内部系统的对象存放到SYSTEM表空间里。同时,确保数据表空间和索引表空间置于不同的硬盘上。
译者按:“同时,确保数据表空间和索引表空间置与不同的硬盘上。”可能改为如下更为准确“同时,确保数据表空间和索引表空间置与不同的硬盘控制卡控制的硬盘上。”