我想知道使用以下方法更新表的性能差异:

UPDATE films SET kind = 'Dramatic' WHERE CURRENT OF c_films;

或这样:

UPDATE films SET kind = 'Dramatic' WHERE unique_indexed_int_column = 3000;

是否有人对此进行了测试或知道使用光标的更新如何工作,以便他们对此发表评论?

编辑:我现在已经对此进行了基准测试,发现它实际上是在第三个速度上进行最新示例的速度。我运行了100000次查询,并定时了差异。我使用使用服务器侧光标的Psycopg2与Postgres进行通信。我将进一步调查,看看是否可以发现情况并非总是如此。

有帮助吗?

解决方案

我不熟悉PostgreSQL,因此我只能给您一个通用的答案。

首先,如果 indexed_int_column 不是唯一的,第二个语句将更新多行,而第一个语句仅在光标下方更新当前的行 c_films. 。因此,陈述并不相同。

假设唯一性和光标C_FILM位于一排 indexed_int_column = 3000, ,然后将光标放置在一行下方,因为光标持有信息直接访问该行的物理位置,因此更新应该非常快。但是,第二个语句将必须先获取索引,在其中查找值3000,然后才知道行的实际位置要更新。也就是说,必须在一个点上为光标完成此查找操作(如果我们没有在整个桌子上迭代)。因此,通常情况下,当您必须先阅读数据时,只需要使用光标才能使用光标,然后要更新您刚刚阅读的同一行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top