真善美

          勇于承擔(dān)責(zé)任; 如果你做不到,要提前跟別人說(shuō)明,不要等到事情發(fā)生后再解釋。

            BlogJava :: 首頁(yè) ::  :: 聯(lián)系 :: 聚合  :: 管理 ::
            55 隨筆 :: 0 文章 :: 29 評(píng)論 :: 0 Trackbacks
           

          1、where條件中關(guān)于日期的,求前10天的記錄

          bad:

          SELECT *

          FROM tablename

          WHERE intime>= sysdate-10

          Better:

          SELECT *

          FROM tablename

          WHERE intime between sysdate - 10 and sysdate

          2、如果sql執(zhí)行次數(shù)頻繁,且數(shù)據(jù)量較小,可以把表數(shù)據(jù)存放到tuxedo共享內(nèi)存獲取數(shù)據(jù)

          3、計(jì)算記錄條數(shù)

             和一般的觀點(diǎn)相反, count(*) 比count(1)稍快 , 當(dāng)然如果可以通過(guò)索引檢索,對(duì)索引列的計(jì)數(shù)仍舊是最快的. 例如 COUNT(EMPNO)

          4、用EXISTS替代IN

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

          5、用NOT EXISTS替代NOT IN

          在子查詢中,NOT IN子句將執(zhí)行一個(gè)內(nèi)部的排序和合并. 無(wú)論在哪種情況下,NOT IN都是最低效的 (因?yàn)樗鼘?duì)子查詢中的表執(zhí)行了一個(gè)全表遍歷). 為了避免使用NOT IN ,我們可以把它改寫(xiě)成外連接(Outer Joins)或NOT EXISTS。

          6、優(yōu)化GROUP BY

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

           低效:

             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、減少對(duì)表的查詢

          在含有子查詢的SQL語(yǔ)句中,要特別注意減少對(duì)表的查詢.

          例如:

               低效

                    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 多個(gè)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、程序中用到計(jì)算的數(shù)值,在查詢時(shí)一定要用nvl(colnum,0),否則返回值可能為null,這樣在程序計(jì)算時(shí)用到parseInt之類(lèi)的轉(zhuǎn)換時(shí),會(huì)報(bào)空指針異常。

          posted on 2010-12-29 15:56 真善美 閱讀(201) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 數(shù)據(jù)庫(kù)學(xué)習(xí)
          主站蜘蛛池模板: 恩施市| 吐鲁番市| 洪湖市| 山东| 包头市| 时尚| 安徽省| 雅江县| 张掖市| 镶黄旗| 清新县| 昆明市| 百色市| 宜宾县| 光山县| 雷波县| 乐陵市| 潼关县| 桃源县| 盘锦市| 津南区| 木里| 广南县| 临沭县| 宁河县| 河南省| 凤凰县| 航空| 六安市| 大埔区| 公安县| 合作市| 邹城市| 文水县| 麻城市| 开阳县| 永登县| 千阳县| 芮城县| 大同县| 双江|