mssql sqlserver or关键字和in关键字性能对比


摘要:
下文通过举例的方式讲述sql脚本中,or关键字和in关键字的性能对比,如下所示:
实验环境:sql server 2008 R2


下文通过举例的方式,对比讲述or关键字和in关键字的应用。
例:
数据表中有 2000万条数据:
查询方式1:分别使用 or 和 in 关键字获取前8条数据
查询方式2:分别使用 or 和 in 关键字获取前100条数据
查询方式3:分别使用 or 和 in 关键字获取前300条数据
查询方式4:分别使用 or 和 in 关键字获取前1200条数据


测试1,where 条件列为主键的情况,使用or 和 in 关键字的执行时间
查询方式1:or和in的执行时间: or的执行时间为:0.003s in的执行时间为:0.003s
查询方式2:or和in的执行时间: or的执行时间为:0.008s in的执行时间为:0.008s
查询方式3:or和in的执行时间: or的执行时间为:0.010s in的执行时间为:0.009s
查询方式4:or和in的执行时间: or的执行时间为:0.020s in的执行时间为:0.018s

测试2,where列为一般索引的情况,4组测试执行计划一样,执行的时间也基本没有区别。
查询方式1:or和in的执行时间: or的执行时间为:0.004s in的执行时间为:0.004s
查询方式2:or和in的执行时间: or的执行时间为:0.008s in的执行时间为:0.007s
查询方式3:or和in的执行时间: or的执行时间为:0.010s in的执行时间为:0.010s
查询方式4:or和in的执行时间: or的执行时间为:0.022s in的执行时间为:0.021s

测试3,where列没有索引的情况,4组测试执行计划就不一样,执行的时间也有了很大的区别。
查询方式1:or和in的执行时间: or的执行时间为:5.018s in的执行时间为:5.073s
查询方式2:or和in的执行时间: or的执行时间为:1min 04s in的执行时间为:5.020s
查询方式3:or和in的执行时间: or的执行时间为:1min 52s in的执行时间为:5.012s
查询方式4:or和in的执行时间: or的执行时间为:6min 15s in的执行时间为:5.050s


in和or的效率,取决where条件列是否有索引或者是否为主键,
当where检索列上存在索引或主键时,无很大性能差异,
如果没有索引时,in的性能比or性能强。