简单地更新包含大约5百万行的表中一个列的重置方法如下:
UPDATE t_Daily
SET Price= NULL
这个表中的任何索引都与价格无关。
没有使用索引运行需要45秒。
使用一个或多个索引至少需要20分钟(我不断地不得不停止它)。
我完全理解维护索引会影响插入和更新语句的性能,但是这个更新操作对表索引没有任何更改,为什么会对性能有如此可怕的影响呢?
非常感谢任何想法。
简单地更新包含大约5百万行的表中一个列的重置方法如下:
UPDATE t_Daily
SET Price= NULL
这个表中的任何索引都与价格无关。
没有使用索引运行需要45秒。
使用一个或多个索引至少需要20分钟(我不断地不得不停止它)。
我完全理解维护索引会影响插入和更新语句的性能,但是这个更新操作对表索引没有任何更改,为什么会对性能有如此可怕的影响呢?
非常感谢任何想法。
这是正常且预期的行为:更新索引可能比更新表本身要耗费十倍左右。表没有排序!
如果price
没有建立索引,您可以使用避免更新索引的HOT(Heap Only Tuple)更新。为了利用它,表必须定义一个小于100的fillfactor
,使得更新后的行能够在与原始行相同的块中找到空间。
注:HOT更新只能应用于堆表,即没有索引或所有索引都是被覆盖的。