索引可以优化 UPDATE 语句吗?

Can indexing optimize UPDATE statements?

我目前正在尝试优化一个 UPDATE 语句,该语句每天执行一次以更新超过 1000 万行的列,这需要几个小时。很简单:

UPDATE table SET column = ''

这个 table 只有 2-3 个索引,不包括提到的列。

由于大部分行已经更新,仅针对上述列的索引是否可以使 sql 服务器更快地查找该列以获得更快的更新?谢谢!

既然你说“大部分行已经更新”,你应该添加一个 WHERE 条件,以便只更新真正需要的行(正如其他人已经说过的) .如果没有 WHERE 子句, 所有 记录都将被更新,即使那些已经具有相同值的 ''.

因此,即使您 90% 的记录需要更新,如果您避免冗余更新,它仍然会更快一些。但是在这种情况下,在该列上有索引只会减慢查询速度,因为在更新基础 table 记录时必须更新每个索引。

为了从索引中获益,您需要一个低选择性的查询,就像SELECT-查询一样。什么可以被认为是“足够低”取决于许多因素。有时索引可以帮助提高 10-20% 的选择性。其他时候,与流行的看法相反,即使只有 1% 的选择性,它也会让事情变得更糟。