为什么postgres的UPDATE函数这么慢?



我有一个大约有180K条记录的表,定义如下:

CREATE TABLE table( 
id text UNIQUE,
classification text,
author text,
date DATE,
score float,
transcript text
)

除了一件事,这里没有什么是不值得注意的。所有文本值均为<200字,除了文字记录栏。记录栏中的文本通常有数百个字符,最多3MB的数据。话虽如此,当我在设置新分类的管道中运行以下命令时:

conn = connect()
conn.cursor().execute("UPDATE table SET classification = '%s' WHERE author = '%s'" % (classification, author))

该命令花费了大量的时间。我已经等了30分钟了,我还没有看到这个命令完成。此外,它会锁定这些行,这将冻结查询该表的附加web应用程序。我不太明白为什么要花这么长时间。

最后,值得注意的是,每个作者在表中的条目少于40个。所以"where"条件不应该影响超过这个数目的条目。

我不知道你的表的相对大小或记录的数量,但如果你还没有一个索引的author列,你可以尝试添加添加一个:

CREATE INDEX idx ON yourTable (author);

您至少可以尝试抑制幂等更新,这会导致大量不必要的行版本。


conn.cursor().execute("UPDATE table SET classification = '%s'
WHERE  classification <> '%s'
AND author = '%s'" % (sector_long, sector_long, ticker) )

此外:既然你抱怨这个更新锁定了其他进程,也可能是其他进程[b]锁定了你的更新。

相关内容

  • 没有找到相关文章

最新更新