Sql 不使用'更新大表中的记录;在';陈述
这张桌子很大,有数百万条记录 表1有三列Sql 不使用'更新大表中的记录;在';陈述,sql,tsql,Sql,Tsql,这张桌子很大,有数百万条记录 表1有三列 一个ID,X列和Y列。目前我使用的是一个“in”语句,速度很慢;尤其是在一张大桌子上。我希望在不使用in语句的情况下提高此update语句的性能。非常感谢您的帮助 Update [Table1] set Column_X='Delete' where Column_Y in( select distinct (Column_Y) from [Table1] where Column_X='Delete' ) re
一个ID,X列和Y列。目前我使用的是一个“in”语句,速度很慢;尤其是在一张大桌子上。我希望在不使用in语句的情况下提高此update语句的性能。非常感谢您的帮助
Update [Table1] set Column_X='Delete' where Column_Y in(
select distinct (Column_Y) from [Table1] where Column_X='Delete'
)
result before running script
Table 1
ID Column X Column Y
1 Delete CAT
2 x1 CAT
3 x1 CAT
4 x1 COW
5 x1 COW
6 x2 Moon
7 Delete Chicken
Intended result after running script
Table 1
ID Column X Column Y
1 Delete CAT
2 Delete CAT
3 Delete CAT
4 x1 COW
5 x1 COW
6 x2 Moon
7 Delete Chicken
您可以在此基础上使用exists子句
Update [Table1] set Column_X='Delete' from [Table1] t1where exists(
select t2.Column_Y
from [Table1] t2
where t2.Column_X = 'Delete'
and t2.Column_Y = t1.Column_Y)
它应该比“in”子句快一点
注意:永远不要使用“in”,因为它会进行全表扫描。“Exists”子句应该适用于几乎所有情况。您可以在FROM子句中多次使用同一个表,例如:
update Table1
set Column_X = 'Delete'
from Table1 a, Table1 b
where a.Column_Y = b.Column_Y
and b.Column_X = 'Delete'
更新影响表1的第一个实例,即“a”