【问题标题】:Speed up a UPDATE with SELECT query使用 SELECT 查询加速 UPDATE
【发布时间】:2012-05-04 20:07:21
【问题描述】:

我有两张桌子:

  • 表 1 包含 Episode 和 Code,其中 Episode 不同。
  • 表 2 包含 Episode 和 Code,但 Episode 不明确(表中的其他字段与任务无关,使每一行都是唯一的)。

我想为每一集将表 1 的代码复制到表 2。当前执行此操作的代码如下:

UPDATE Table2
SET Table2.Code = (SELECT TOP 1 Code FROM Table1 WHERE Episode = Table2.Episode)

这需要几个小时。 (我不知道确切的小时数,因为我在大约 20 小时标记时取消了它。)他们是大桌子,但肯定有更快的方法吗?

【问题讨论】:

    标签: sql-server sql-server-2005 optimization


    【解决方案1】:

    我手边没有 SQL Server,我也不完全确定,但我似乎记得有一个类似以下的语法可能会加快速度。

     UPDATE Table2 SET Table2.Code = Table1.Code FROM Table1 
     WHERE Table1.Episode = Table2.Episode
    

    【讨论】:

    • join 可能属于更新子句,但我自己从未尝试过:stackoverflow.com/questions/871905/…
    • 我知道我已经尝试过了,但现在为时已晚,我困了:-)。我认为使用隐含连接的语法是正确的,并且您的链接使用显式连接。
    • 哇。这把它变成了一个 6 分钟的查询,而不是一个 20 小时的查询。 :O。 ...现在验证结果集是否相同...
    • 在两个表中添加关于 Episode 的一些索引,您也许可以将其缩短到不到一分钟。
    • 是的,两个表中的索引也会到期
    【解决方案2】:

    两张表的“代码”和“剧集”列是否有任何索引?这些肯定会有助于加快速度!

    马克

    【讨论】:

      【解决方案3】:

      您可以将 UPDATE 与这样的连接一起使用。请注意,您必须指定FROM

      UPDATE MyTable
      SET MyColVal = O.NewVal
      FROM MyTable T
      INNER JOIN MyOtherTable O ON T.Id=O.Id
      WHERE ...
      

      http://doc.ddart.net/mssql/sql70/ua-uz_3.htm

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-11
        • 1970-01-01
        • 2021-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多