update a set flag=1 where exists (select fieldb from b where fieldb=a.fielda)
update a set flag=1 where exists (select fieldb from b where fieldb=a.fielda)
sql server 里, 不管是in 还是exists, 都会是一个nested loop. 如果a和b都很大的话,就会非常非常慢。考虑到对大数据量的情况,应该想办法用merge join.所以,如果在fieldb.b上有一个unique的index, 那么: update a set flag = 1 from a inner join b on a.fielda=b.fieldb而如果不存在这么一个unique的约束,那大概只能使用临时表。 select district fieldb into #tmp from b create unique clustered index ix_b on b(fieldb) with fillfactor=100 update a set flag = 1 from a inner join #tmp b on a.fielda = b.fieldb
可是 update a set flag = 1 from a inner join b on a.fielda=b.fieldb在from行 报错: SQL command not properly ended
不管是in 还是exists, 都会是一个nested loop. 如果a和b都很大的话,就会非常非常慢。考虑到对大数据量的情况,应该想办法用merge join.所以,如果在fieldb.b上有一个unique的index, 那么:
update a set flag = 1
from a inner join b
on a.fielda=b.fieldb而如果不存在这么一个unique的约束,那大概只能使用临时表。
select district fieldb into #tmp from b
create unique clustered index ix_b on b(fieldb) with fillfactor=100
update a set flag = 1 from a inner join #tmp b
on a.fielda = b.fieldb
update a set flag = 1
from a inner join b
on a.fielda=b.fieldb在from行
报错:
SQL command not properly ended