【发布时间】: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
我在一个包含大约 100,000 条记录的 SQL 2000 表上使用以下 SQL。它非常慢。
如何加快速度?
UPDATE [MASTER]
SET [STATUS] = 1
WHERE [CODE] IN (" + *customerCodes* + ")";
customerCodes 是从用户可以从网格中检查客户的 UI 传递的。
【问题讨论】:
标签: c# sql performance
开始改进此查询的最明显的地方是查看您在 [MASTER] 表上的索引(顺便说一下,这不是一个很好的表名称,我建议将其重命名为不太通用的名称,特别是因为 SQL Server 系统数据库被称为主数据库)。
您要确保 [CODE] 上有索引。
从那里下一步是开始查看查询执行计划。
在 SQL Server Management Studio(或 SQL 2000 上的查询分析器)中,可以查看查询执行计划。我手边没有查询分析器的副本,所以我只能说,在 SSMS 中,您可以通过选择 Query -> Include Actual Execution Plan 查看执行计划。下次运行查询时,您将能够看到查询是如何执行的。您需要确保始终在查询中命中索引,并且不会执行诸如表扫描之类的低性能操作。
查询执行计划需要注意的一点是,它会在大型数据集上显示与小型数据集不同的执行计划,因此要调整大型查询,您需要大量测试数据。
可能值得尝试的最后一件事是将您的 customerCodes 变量(我猜它类似于:'2、6、10、5',这是一个逗号分隔的 id 列表)转换为表值函数。我不确定这是否会给查询优化器更多的工作,但它可能会。
【讨论】:
嗯,最简单的方法是确保“where”子句使用索引字段。 (因此这意味着您更改界面,以便获取索引字段(通常是 ID),而不是您当前正在执行的任何操作)。
【讨论】: