真善美

          勇于承擔責任; 如果你做不到,要提前跟別人說明,不要等到事情發生后再解釋。

            BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理 ::
            55 隨筆 :: 0 文章 :: 29 評論 :: 0 Trackbacks
           

          1、where條件中關于日期的,求前10天的記錄

          bad:

          SELECT *

          FROM tablename

          WHERE intime>= sysdate-10

          Better:

          SELECT *

          FROM tablename

          WHERE intime between sysdate - 10 and sysdate

          2、如果sql執行次數頻繁,且數據量較小,可以把表數據存放到tuxedo共享內存獲取數據

          3、計算記錄條數

             和一般的觀點相反, count(*) 比count(1)稍快 , 當然如果可以通過索引檢索,對索引列的計數仍舊是最快的. 例如 COUNT(EMPNO)

          4、用EXISTS替代IN

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

          5、用NOT EXISTS替代NOT IN

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

          6、優化GROUP BY

          提高GROUP BY 語句的效率, 可以通過將不需要的記錄在GROUP BY 之前過濾掉.下面兩個查詢返回相同結果但第二個明顯就快了許多.

           低效:

             SELECT JOB , AVG(SAL)

             FROM EMP

             GROUP JOB

             HAVING JOB = ‘PRESIDENT’

             OR JOB = ‘MANAGER’

           高效:

             SELECT JOB , AVG(SAL)

             FROM EMP

             WHERE JOB = ‘PRESIDENT’

             OR JOB = ‘MANAGER’

           GROUP by JOB

          7、減少對表的查詢

          在含有子查詢的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;

          8、程序中用到計算的數值,在查詢時一定要用nvl(colnum,0),否則返回值可能為null,這樣在程序計算時用到parseInt之類的轉換時,會報空指針異常。

          posted on 2010-12-29 15:56 真善美 閱讀(197) 評論(0)  編輯  收藏 所屬分類: 數據庫學習
          主站蜘蛛池模板: 昌宁县| 长春市| 琼结县| 丹巴县| 神池县| 德惠市| 喀喇沁旗| 蚌埠市| 会同县| 漳浦县| 温州市| 桦南县| 托克逊县| 巨鹿县| 邓州市| 科技| 松溪县| 沙湾县| 建宁县| 巴塘县| 富平县| 南京市| 凤阳县| 科尔| 沁水县| 阳城县| 耿马| 读书| 四子王旗| 宁海县| 金山区| 巨鹿县| 航空| 育儿| 金秀| 毕节市| 百色市| 安吉县| 汪清县| 清苑县| 壤塘县|