Postgres: rendimiento sorprendente en actualizaciones usando el cursor

Considere los dos siguientes ejemplos de código de Python, que logra lo mismo pero con una diferencia de rendimiento significativa y sorprendente.

import psycopg2, time

conn = psycopg2.connect("dbname=mydatabase user=postgres")
cur = conn.cursor('cursor_unique_name')  
cur2 = conn.cursor()

startTime = time.clock()
cur.execute("SELECT * FROM test for update;")
print ("Finished: SELECT * FROM test for update;: " + str(time.clock() - startTime));
for i in range (100000):
    cur.fetchone()
    cur2.execute("update test set num = num + 1 where current of cursor_unique_name;")
print ("Finished: update starting commit: " + str(time.clock() - startTime));
conn.commit()
print ("Finished: update : " + str(time.clock() - startTime));

cur2.close()
conn.close()

Y:

import psycopg2, time

conn = psycopg2.connect("dbname=mydatabase user=postgres")
cur = conn.cursor('cursor_unique_name')  
cur2 = conn.cursor()

startTime = time.clock()
for i in range (100000):
    cur2.execute("update test set num = num + 1 where id = " + str(i) + ";")
print ("Finished: update starting commit: " + str(time.clock() - startTime));
conn.commit()
print ("Finished: update : " + str(time.clock() - startTime));

cur2.close()
conn.close()

La declaración de creación para la prueba de tabla es:

CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);

Y esa tabla contiene 100000 filas y PRUEBA DE ANÁLISIS DE VACÍO; ha sido ejecutado.

Obtuve los siguientes resultados consistentemente en varios intentos.

Primer ejemplo de código:

Finished: SELECT * FROM test for update;: 0.00609304950429
Finished: update starting commit: 37.3272754429
Finished: update : 37.4449708474

Segundo ejemplo de código:

Finished: update starting commit: 24.574401185
Finished committing: 24.7331461431

Esto es muy sorprendente para mí, ya que creo que debería ser exactamente lo contrario, lo que significa que una actualización usando el cursor debería ser significativamente más rápida de acuerdo conesta responder.

Respuestas a la pregunta(1)

Su respuesta a la pregunta