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

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

          通常情況下, 用UNION替換WHERE子句中的OR將會起到較好的效果. 對索引列使用OR將造成全表掃描. 注意, 以上規則只針對多個索引列有效. 如果有column沒有被索引, 查詢效率可能會因為你沒有選擇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” 


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


          注意: 


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

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


          ORACLE 內部將以上轉換為 

          WHERE KEY1 = 10 AND 

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

          posted on 2007-09-27 19:04 Crying 閱讀(221) 評論(0)  編輯  收藏 所屬分類: 數據庫
          主站蜘蛛池模板: 龙胜| 博白县| 鄯善县| 玛曲县| 淄博市| 洱源县| 白沙| 永胜县| 北安市| 河津市| 灵寿县| 襄垣县| 环江| 岐山县| 应用必备| 儋州市| 靖宇县| 安化县| 肥城市| 岑溪市| 开原市| 怀安县| 泸水县| 洪湖市| 河间市| 鹰潭市| 阿瓦提县| 洛扎县| 宜兴市| 油尖旺区| 甘德县| 屏边| 丰城市| 桦川县| 高清| 永春县| 卢氏县| 云浮市| 芦溪县| 柳林县| 吉林省|