注册 登录
编程论坛 SQL Server论坛

执行相同语句不同消耗时间问题,求解。

ganyubin 发布于 2019-10-10 10:56, 1888 次点击
问题现象如下:

SQL2005
数据库201910
   执行语句 select 字段A from 表1 where 字段A not in(select 字段A from 表2)
   执行消耗时间11秒
   表1数据30条,字段A主键
   表2数据318万条,字段A非主键非索引

问题来了,几天之前同样的语句执行结果只需要不到一秒
为验证,恢复一个月前的数据库201909到相同数据引擎下。

数据库201909
   执行语句 select 字段A from 表1 where 字段A not in(select 字段A from 表2)
   执行消耗时间0秒
   表1数据30条,字段A主键
   表2数据311万条,字段A非主键非索引

为了测试是不是数据量到了临界值,于是又恢复了一年前的数据库201810到同数据引擎下。
数据库201810
   执行语句 select 字段A from 表1 where 字段A not in(select 字段A from 表2)
   执行消耗时间8秒
   表1数据30条,字段A主键
   表2数据225万条,字段A非主键非索引

相同语句不同耗时,与数据量大小无关,为啥呢?
在三库多次测试这条语句所耗时间,结果比较稳定,误差1秒内。
至此完全蒙圈,此题何解?


   
2 回复
#2
mywisdom882019-10-15 10:20
SQL中 NOT IN使用不到索引,肯定很慢
-- not in 改为关联 left join
select 字段A from 表1 as b1
left join 表2 as b2
on b1.字段A=b2.字段A
where b2.字段A is null
#3
sssooosss2020-06-16 09:52
学习
1