postgresql - PostgreSQL 带索引的慢更新
问题描述
非常简单地更新以重置大约 500 万行的表中的 1 列:
UPDATE t_Daily
SET Price= NULL
价格不是该表上任何索引的一部分。
在没有索引的情况下运行它需要 45 秒。
使用一个或多个索引运行它至少需要 20 分钟(我一直不得不停止它)。
我完全理解为什么维护索引会影响插入和更新语句的性能,但是这次更新对表索引没有任何改变,那么为什么它会对性能产生如此可怕的影响呢?
任何想法都非常感谢。
解决方案
这是正常的,也是意料之中的:更新索引的成本可能是更新表本身的十倍。该表没有排序!
如果price
未编入索引,则可以使用避免更新索引的 HOT 更新。为了利用它,表必须定义为fillfactor
小于 100,以便更新的行可以在与原始行相同的块中找到空间。
推荐阅读
- javascript - 单击时在不可编辑的 td 上设置焦点并显示轮廓
- python - 没有默认值的可选参数
- java - 如何在 Java 中显示通过 do while 循环输入的输入?
- swift - 在 Firebase 中创建用户 - 实时数据库
- python - 如何在熊猫中选择具有特定起始值和特定结束值的行子集
- java - RGBimage 数组和创建 ppm 文件
- c# - DotSpatial 中的栅格操作
- arrays - 如何加载和保存数据?- 斯威夫特
- java - 如何使用 Quarkus 在服务器模式下启动 H2?
- c++ - 对 std::array 的模板化引用未在 MSVC 中调用 SFINAE*。漏洞?