首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新大表中的记录而不使用' in‘语句

更新大表中的记录而不使用' in‘语句
EN

Stack Overflow用户
提问于 2014-04-07 03:36:30
回答 2查看 38关注 0票数 0

这张桌子是一张大桌子,有上百万的记录。

表1有三列

ID、列X和列Y。目前我使用的语句" in“很慢,尤其是在大表中。我希望在不使用in语句的情况下提高此update语句的性能。任何帮助都是非常感谢的。

代码语言:javascript
复制
    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   
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-07 03:53:57

您可以在FROM子句中多次使用同一个表,因此如下所示:

代码语言:javascript
复制
update Table1
   set Column_X = 'Delete'
  from Table1 a, Table1 b
 where a.Column_Y = b.Column_Y
   and b.Column_X = 'Delete'

更新会影响Table1的第一个实例,即"a“。

票数 1
EN

Stack Overflow用户

发布于 2014-04-07 03:49:39

您可以对此使用exists子句。

代码语言:javascript
复制
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“,因为它会进行全表扫描。“存在”一语几乎适用于所有情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22903173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档