丄諦啲仇魜ヤ
          如 果 敵 人 讓 你 生 氣 , 那 說 明 你 沒 有 勝 他 的 把 握!
          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 閱讀(225) 評論(0)  編輯  收藏 所屬分類: 數據庫
          主站蜘蛛池模板: 鹤峰县| 鄄城县| 习水县| 双辽市| 武清区| 黔东| 隆子县| 旺苍县| 绥中县| 开远市| 堆龙德庆县| 陈巴尔虎旗| 彭山县| 孟连| 榆树市| 翼城县| 孙吴县| 赣州市| 社旗县| 保康县| 临邑县| 安陆市| 成武县| 航空| 丽江市| 阿拉善右旗| 贵德县| 新竹县| 镇雄县| 大庆市| 石河子市| 邵阳市| 高雄市| 丰都县| 香港 | 章丘市| 边坝县| 通榆县| 全南县| 永顺县| 遂溪县|