【正文】
= 39。 SQL語(yǔ)句的優(yōu)化規(guī)則 ? 少 用 DISTINCT, 可考慮 用 EXISTS代替 例: X SELECT DISTINCT , FROM dept d, emp e WHERE = 。 SQL語(yǔ)句的優(yōu)化規(guī)則 ? 用 WHERE子句替代 HAVING子句 例: X SELECT ... FROM emp HAVING dept_no = 10。 SQL語(yǔ)句的優(yōu)化規(guī)則 ? 使 用 UNION ALL、 UNION、 MINUS、INTERSECT操作 提高 性能 ? UNION ALL無(wú)需內(nèi)部排序操作,在適當(dāng)?shù)那闆r下可以替代 UNION ? UNION ALL、 UNION、 MINUS、 INTERSECT可用亍分解復(fù)雜的 SQL邏輯 SQL語(yǔ)句的優(yōu)化規(guī)則 ? 使用 ROWID提高檢索速度 例: SELECT rowid INTO v_rowid FROM t1 WHERE con1 FOR UPDATE OF col2。 SQL語(yǔ)句的優(yōu)化規(guī)則 ? 指定 FROM子句中表的順序:扮演 driving table角色的表放在 最 后 例: 表 emp有 10000萬(wàn)條記錄,表 dept有 10條記錄 X SELECT , FROM emp a, dept b WHERE = AND = 39。 O SELECT , FROM dept b, emp a WHERE = AND = 39。 SQL語(yǔ)句的優(yōu)化規(guī)則 ? WHERE子句 AND條件的過(guò)濾原則:應(yīng)使過(guò)濾 記錄最 有效 的 條件放在最后面 例: 如果 emp表上沒(méi)有索引 X SELECT ... FROM emp e WHERE emp_salary 50000 AND emp_type = 39。 AND 25 ( SELECT count(*) FROM emp WHERE emp_mgr = )。MANAGER39。MANAGER39。 SQL語(yǔ)句的優(yōu)化規(guī)則 ? 續(xù) O SELECT ... FROM emp e WHERE ( emp_salary 50000 AND emp_type = 39。 ) OR 25 ( SELECT count(*) FROM emp WHERE emp_mgr = )。應(yīng)把‘值’設(shè)置為一個(gè)變量,所有的共同語(yǔ)句都可以優(yōu)化一次,高度共享語(yǔ)句解釋優(yōu)化的結(jié)果。 SQL語(yǔ)句的優(yōu)化規(guī)則 ? 使用 優(yōu)化線索機(jī)制進(jìn)行訪問(wèn)路徑控制 例 : SELECT FROM emp e WHERE || 39。 = 39。 丌如下面的語(yǔ)句 好 SELECT /*+ FULL(EMP) */ FROM emp e WHERE = 39。 SQL語(yǔ)句的優(yōu)化規(guī)則 ? 顯示 光標(biāo)優(yōu)于隱式光標(biāo) 例 : UPDATE target t SET t_field = ( SELECT ... FROM source s1 WHERE = ) WHERE EXISTS ( SELECT ... FROM source s2 WHERE = ) SQL語(yǔ)句的優(yōu)化規(guī)則 ? 續(xù) 丌如 下面的語(yǔ)句 好 : DECL