国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

ORACLE SQL性能優化系列 (五)

2024-08-29 13:46:13
字體:
來源:轉載
供稿:網友

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 (基礎表)

WHERE EMPNO > 0

AND EXISTS (SELECT ‘X’ 

FROM DEPT 

WHERE DEPT.DEPTNO = EMP.DEPTNO

AND LOC = ‘MELB’)

 

 

 (譯者按: 相對來說,用NOT EXISTS替換NOT IN 將更顯著地提高效率,下一節中將指出)

 

 

19.       用NOT EXISTS替代NOT IN

在子查詢中,NOT IN子句將執行一個內部的排序和合并. 無論在哪種情況下,NOT IN都是最低效的 (因為它對子查詢中的表執行了一個全表遍歷).  為了避免使用NOT IN ,我們可以把它改寫成外連接(Outer Joins)或NOT EXISTS.

 

例如:

SELECT …

FROM EMP

WHERE DEPT_NO NOT IN (SELECT DEPT_NO 

                         FROM DEPT 

                         WHERE DEPT_CAT=’A’);

 

為了提高效率.改寫為:

 

(方法一: 高效)

SELECT ….

FROM EMP A,DEPT B

WHERE A.DEPT_NO = B.DEPT(+)

AND B.DEPT_NO IS NULL

AND B.DEPT_CAT(+) = ‘A’

 

 

(方法二: 最高效)

SELECT ….

FROM EMP E

WHERE NOT EXISTS (SELECT ‘X’ 

                    FROM DEPT D

                    WHERE D.DEPT_NO = E.DEPT_NO


                    AND DEPT_CAT = ‘A’);

  ORACLE SQL性能優化系列 (五)(圖一) 

(待續)

--(中國軟件www.csdn.net)轉載



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新乐市| 广灵县| 延寿县| 凤冈县| 扬中市| 赤峰市| 神农架林区| 张家港市| 英德市| 密云县| 桦甸市| 荆门市| 平邑县| 治县。| 泰州市| 泽州县| 永定县| 沽源县| 德江县| 通道| 商河县| 遂平县| 虎林市| 百色市| 鄂尔多斯市| 襄垣县| 家居| 昌江| 安泽县| 内丘县| 静安区| 盐城市| 五常市| 武威市| 巨野县| 水富县| 娱乐| 洪洞县| 松阳县| 桐乡市| 桐乡市|