丄諦啲仇魜ヤ
          如 果 敵 人 讓 你 生 氣 , 那 說 明 你 沒 有 勝 他 的 把 握!
          posts - 6,comments - 56,trackbacks - 1

          36. 用UNION替換OR (適用于索引列) 

          通常情況下, 用UNION替換WHERE子句中的OR將會起到較好的效果. 對索引列使用OR將造成全表掃描. 注意, 以上規(guī)則只針對多個(gè)索引列有效. 如果有column沒有被索引, 查詢效率可能會因?yàn)槟銢]有選擇OR而降低. 

          在下面的例子中, LOC_ID 和REGION上都建有索引. 

          高效: 

          SELECT LOC_ID , LOC_DESC , REGION 

          FROM LOCATION 

          WHERE LOC_ID = 10 

          UNION 

          SELECT LOC_ID , LOC_DESC , REGION 

          FROM LOCATION 

          WHERE REGION = “MELBOURNE” 


          低效: 

          SELECT LOC_ID , LOC_DESC , REGION 

          FROM LOCATION 

          WHERE LOC_ID = 10 OR REGION = “MELBOURNE” 


          如果你堅(jiān)持要用OR, 那就需要返回記錄最少的索引列寫在最前面. 


          注意: 


          WHERE KEY1 = 10 (返回最少記錄) 

          OR KEY2 = 20 (返回最多記錄) 


          ORACLE 內(nèi)部將以上轉(zhuǎn)換為 

          WHERE KEY1 = 10 AND 

          ((NOT KEY1 = 10) AND KEY2 = 20) 

          posted on 2007-09-27 19:04 Crying 閱讀(221) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫
          主站蜘蛛池模板: 恩施市| 垫江县| 闵行区| 卢氏县| 凭祥市| 健康| 莲花县| 成武县| 从江县| 自治县| 江城| 温泉县| 得荣县| 信丰县| 镶黄旗| 玛沁县| 岳西县| 乌什县| 襄城县| 环江| 桂东县| 黑河市| 谢通门县| 濮阳县| 肃北| 海安县| 五华县| 视频| 黑山县| 青浦区| 萍乡市| 西藏| 西青区| 土默特左旗| 汝城县| 黄梅县| 南平市| 大安市| 土默特右旗| 黄骅市| 霸州市|