摘要:
下文将通过对实际表进行查询测试,得出or和union的效率分析,如下所示:
实验环境:sqlserver 2008 R2
数据表:
[20180627Tmp]
无任何索引
拥有1041175行数据
——————————————-
sql脚本 or写法:
set statistics io on
DBCC DROPCLEANBUFFERS ---清理缓存
select testZiDuan from [20180627Tmp]
where testZiDuan ='3E6A5407-E5FF-4F7D-9723-FF10CC950D8C'
or
testZiDuan ='A1B1681A-076D-453E-80DE-D8FF7575EC8B'
go
———————涉及IO————————–
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
(2 行受影响)
表 ‘20180627Tmp’。扫描计数 9,逻辑读取 50333 次,物理读取 2774 次,预读 50333 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(1 行受影响)
——————-执行计划—————————
mssql_sqlserver_or关键字执行计划
sql脚本union写法:
DBCC DROPCLEANBUFFERS ---清理缓存
select testZiDuan from [20180627Tmp]
where testZiDuan ='3E6A5407-E5FF-4F7D-9723-FF10CC950D8C'
union
select testZiDuan from [20180627Tmp]
where testZiDuan ='A1B1681A-076D-453E-80DE-D8FF7575EC8B'
———————涉及IO————————–
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
(2 行受影响)
表 ‘20180627Tmp’。扫描计数 18,逻辑读取 100666 次,物理读取 2690 次,预读 50333 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(1 行受影响)
——————-执行计划—————————
mssql_sqlserver_union关键字执行计划
mssql_sqlserver_union关键字执行计划-2
or union无索引情况下,查询效率总结:
在上述数据查询中,or关键字同union关键字运行耗时一致;
———————————————————————
再涉及的逻辑读取union 因为涉及两次查询操作,所以逻辑读数:union关键字是or关键字的两倍,所以针对上述操作or关键字效率高于union。