我在SQL 2000表上使用了以下SQL,其中包含大约100,000条记录。这很慢。
如何加快速度?
UPDATE [MASTER]
SET [STATUS] = 1
WHERE [CODE] IN (" + *customerCodes* + ")";
从用户可以从网格中检查客户的UI传递customerCodes 。
答案 0 :(得分:1)
开始改进此查询最明显的地方是查看[MASTER]表上的索引(对于表来说不是一个好名字,顺便说一句,我建议将其重命名为不太通用的特别是因为SQL Server系统数据库被称为master。。
您想确保[CODE]上有索引。
从那里开始,下一步是开始查看查询执行计划。
在SQL Server Management Studio(或SQL 2000上的查询分析器)中,可以查看查询执行计划。我没有方便的查询分析器副本,所以我只能说在SSMS中你可以通过选择查询来查看执行计划 - >包括实际执行计划。下次运行查询时,您将能够看到查询的执行方式。您将希望确保始终在查询中访问索引,并且您没有执行表扫描等低性能操作。
使用查询执行计划需要注意的一点是,它将在大型数据集上显示与小型数据不同的执行计划,因此要调整大型查询,您需要大量的测试数据。
可能值得尝试的最后一件事是将您的customerCodes变量(我猜是类似于:'2,6,10,5',即逗号分隔的ID列表)转换为结果表值函数。我不确定这会让查询优化器更多地工作,但它可能会。
答案 1 :(得分:0)
嗯,最简单的方法是确保'where'子句使用索引的字段。 (因此,这意味着您需要更改界面,以便获得索引字段(通常是ID)而不是您当前正在执行的操作。