mysql sqlserver or和union 执行效率比较


摘要:
下文将通过对实际表进行查询测试,得出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关键字执行计划

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关键字执行计划


mssql_sqlserver_union关键字执行计划-2

mssql_sqlserver_union关键字执行计划-2



or union无索引情况下,查询效率总结:
在上述数据查询中,or关键字同union关键字运行耗时一致;
———————————————————————
再涉及的逻辑读取union 因为涉及两次查询操作,所以逻辑读数:union关键字是or关键字的两倍,所以针对上述操作or关键字效率高于union。