我在SQL Server中有一个简单的更新查询,让我们说:
UPDATE TableName
SET Field1 = '1'
WHERE Field1 = '2'
我可以从实际执行计划中看出,更新表本身几乎不需要任何时间(因为表上的索引首先由Field1排序)。问题是更新索引,特别是在索引可以更新之前进行的排序。对于其中两个索引,我理解为什么排序是必要的:它们当前不是由Field1首先排序的。但是,其中一个是由Field1首先排序的,所以我认为在更新索引之前的排序步骤是不必要的。它会在更新该索引之前对其进行排序,并且占用执行成本的23%。
这不会是一个问题,除了表中的数据有超过2500万行,并且排序需要很长时间才能使应用程序保持超时等待它。在我看来,对一个索引的23%排序步骤应该是不必要的。任何可能导致它再次排序的理论都将受到赞赏。