SELECT * FROM TB WHERE COL1=1 OR COL1=2
结果应该和
SELECT * FROM TB WHERE COL1=1
UNION ALL
SELECT * FROM TB WHERE COL1=2
结果一样
也就是说,OR和UNION ALL可以完成相同的工作,那么什么情况下用UNION ALL会比用OR快呢?
希望大家指点

解决方案 »

  1.   

    用UNION 替换OR (适用于索引列)
    通常情况下, 用UNION 替换WHERE 子句中的OR 将会起到较好的效果. 对索引列使用OR 将造
    成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有column 没有被索引, 查询效
    率可能会因为你没有选择OR 而降低.
    BS 0分
      

  2.   

    在下面的例子中, 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”