在PostgreSQL中使用光标的更新性能
-
16-10-2019 - |
题
我想知道使用以下方法更新表的性能差异:
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,然后才知道行的实际位置要更新。也就是说,必须在一个点上为光标完成此查找操作(如果我们没有在整个桌子上迭代)。因此,通常情况下,当您必须先阅读数据时,只需要使用光标才能使用光标,然后要更新您刚刚阅读的同一行。
不隶属于 StackOverflow