我有一个简单的更新查询(foo列类型是BOOLEAN(默认为false)):
update tablename set foo = true where id = 234;
将“id”设置为(主)键,如果我运行“explain analyze”,我得到:
Index Cond: (id = 234)
Total runtime: 0.358 ms
但是,我在慢速日志(pgfouine)上有大量无法解释的查询,这需要超过200秒(?!):
Times executed: 99, Av. duration (s): 70
任何人都可以解释一下,原因是什么? (表中有1.5 mio行,postgresql 8.4)
答案 0 :(得分:2)
我的第一个猜测是你有一些其他查询锁定整个表或正在更新的行。您的简单更新是被迫等待其他操作完成的。
答案 1 :(得分:1)
检查您是否对更新的列没有任何索引或约束。如果是这样,那么数据库可能正在进行索引重新计算或约束评估。这些附加任务不包含在EXPLAIN ANALYZE结果中。
其他可能性是由于I / O操作而导致速度很慢。请检查此thread about UPDATE performance in Postgres。