海鷗航際

          JAVA站
          posts - 11, comments - 53, trackbacks - 1, articles - 102
           

          17.       使用表的別名(Alias)

          當(dāng)在SQL語句中連接多個表時, 請使用表的別名并把別名前綴于每個Column.這樣一來,就可以減少解析的時間并減少那些由Column歧義引起的語法錯誤.

           

          (譯者注: Column歧義指的是由于SQL中不同的表具有相同的Column,當(dāng)SQL語句中出現(xiàn)這個Column,SQL解析器無法判斷這個Column的歸屬)

           

          18.       EXISTS替代IN

          在許多基于基礎(chǔ)表的查詢中,為了滿足一個條件,往往需要對另一個表進行聯(lián)接.在這種情況下, 使用EXISTS(NOT EXISTS)通常將提高查詢的效率.

           

          低效:

          SELECT *

          FROM EMP (基礎(chǔ)表)

          WHERE EMPNO > 0

          AND DEPTNO IN (SELECT DEPTNO

          FROM DEPT

          WHERE LOC = ‘MELB’)

             

          高效:

          SELECT *

          FROM EMP (基礎(chǔ)表)

          WHERE EMPNO > 0

          AND EXISTS (SELECT ‘X’

          FROM DEPT

          WHERE DEPT.DEPTNO = EMP.DEPTNO

          AND LOC = ‘MELB’)

           

           

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

           

           

          19.       NOT EXISTS替代NOT IN

          在子查詢中,NOT IN子句將執(zhí)行一個內(nèi)部的排序和合并. 無論在哪種情況下,NOT IN都是最低效的 (因為它對子查詢中的表執(zhí)行了一個全表遍歷).  為了避免使用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’);

           

          (待續(xù))

          主站蜘蛛池模板: 阿拉尔市| 翁牛特旗| 泌阳县| 平顺县| 和平区| 赫章县| 铜鼓县| 甘南县| 张家港市| 六枝特区| 绥江县| 夏河县| 图木舒克市| 岳阳市| 英德市| 浠水县| 吴旗县| 大足县| 双牌县| 饶河县| 景谷| 扶风县| 江孜县| 大足县| 沛县| 屯门区| 大冶市| 河曲县| 噶尔县| 逊克县| 吉首市| 延庆县| 炎陵县| 普洱| 同江市| 新乡市| 叶城县| 巴林右旗| 平湖市| 琼海市| 通海县|