【问题标题】:Speeding Up Update SQL Query加快更新 SQL 查询
【发布时间】:2010-01-08 05:15:07
【问题描述】:

我在一个包含大约 100,000 条记录的 SQL 2000 表上使用以下 SQL。它非常慢。

如何加快速度?

UPDATE [MASTER] 
   SET [STATUS] = 1 
 WHERE [CODE] IN (" + *customerCodes* + ")";

customerCodes 是从用户可以从网格中检查客户的 UI 传递的。

【问题讨论】:

    标签: c# sql performance


    【解决方案1】:

    开始改进此查询的最明显的地方是查看您在 [MASTER] 表上的索引(顺便说一下,这不是一个很好的表名称,我建议将其重命名为不太通用的名称,特别是因为 SQL Server 系统数据库被称为主数据库)。

    您要确保 [CODE] 上有索引。

    从那里下一步是开始查看查询执行计划。

    在 SQL Server Management Studio(或 SQL 2000 上的查询分析器)中,可以查看查询执行计划。我手边没有查询分析器的副本,所以我只能说,在 SSMS 中,您可以通过选择 Query -> Include Actual Execution Plan 查看执行计划。下次运行查询时,您将能够看到查询是如何执行的。您需要确保始终在查询中命中索引,并且不会执行诸如表扫描之类的低性能操作。

    查询执行计划需要注意的一点是,它会在大型数据集上显示与小型数据集不同的执行计划,因此要调整大型查询,您需要大量测试数据。

    可能值得尝试的最后一件事是将您的 customerCodes 变量(我猜它类似于:'2、6、10、5',这是一个逗号分隔的 id 列表)转换为表值函数。我不确定这是否会给查询优化器更多的工作,但它可能会。

    【讨论】:

    • 将 'AND [STATUS] 1' 添加到 WHERE 子句将避免冗余更新(除非您依赖它们作为触发器)。
    【解决方案2】:

    嗯,最简单的方法是确保“where”子句使用索引字段。 (因此这意味着您更改界面,以便获取索引字段(通常是 ID),而不是您当前正在执行的任何操作)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      相关资源
      最近更新 更多