OR 和 UNION ALL

guguda2008 2009-08-20 12:06:18
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快呢?
希望大家指点
...全文
68 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
guguda2008 2009-08-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 feixianxxx 的回复:]
SQL code用UNION 替换OR (适用于索引列)
通常情况下, 用UNION 替换WHERE 子句中的OR 将会起到较好的效果. 对索引列使用OR 将造
成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有column 没有被索引, 查询效
率可能会因为你没有选择OR 而降低.
BS 0分
[/Quote]
我给我点分我就散
华夏小卒 2009-08-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 feixianxxx 的回复:]
SQL code用UNION 替换OR (适用于索引列)
通常情况下, 用UNION 替换WHERE 子句中的OR 将会起到较好的效果. 对索引列使用OR 将造
成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有column 没有被索引, 查询效
率可能会因为你没有选择OR 而降低.
BS 0分
[/Quote].
feixianxxx 2009-08-20
  • 打赏
  • 举报
回复
在下面的例子中, 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”
feixianxxx 2009-08-20
  • 打赏
  • 举报
回复
用UNION 替换OR (适用于索引列)
通常情况下, 用UNION 替换WHERE 子句中的OR 将会起到较好的效果. 对索引列使用OR 将造
成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有column 没有被索引, 查询效
率可能会因为你没有选择OR 而降低.

BS 0分
SQL77 2009-08-20
  • 打赏
  • 举报
回复
学习

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧