Pregunta

Me gustaría saber la diferencia de rendimiento en la actualización de una tabla utilizando el método siguiente:

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

o como esto:

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

¿Alguien ha probado esto o sabe cómo actualizaciones utilizando los cursores de trabajo para que puedan comentar sobre esto?

EDIT: Ahora he referenciado esto y encontrado que es de hecho alrededor de un tercio más rápida de hacer el último ejemplo. Me encontré con cada una de las consultas 100000 veces y con fecha determinada la diferencia. Solía ??psycopg2 utilizando los cursores del lado del servidor para comunicarse con PostgreSQL. Voy a investigar más a fondo para ver si puedo encontrar que esto no siempre es el caso.

¿Fue útil?

Solución

No estoy familiarizado con PostgreSQL, así que sólo puedo darle una respuesta genérica.

En primer lugar, si indexed_int_column no es única, la segunda instrucción se actualizará varias filas, mientras que el primero sólo se actualizará la fila actualmente bajo el c_films cursor. Por lo que las declaraciones no son idénticos.

Suponiendo singularidad y los c_films cursor estar en la fila donde indexed_int_column = 3000, a continuación, actualizando debe ser muy rápida una vez que el cursor se encuentra bajo una cierta fila, ya que el cursor contiene la información para acceder directamente a la ubicación física de esta fila. La segunda afirmación, sin embargo, tendrá que buscar el índice en primer lugar, buscar el valor de 3000 en el mismo y sólo entonces se sabrá la ubicación física de la fila de actualización. Dicho esto, esta operación de búsqueda que había que hacer para que el cursor en un punto a (si no lo hacíamos iterar sobre toda la mesa que es). Así que, en general, sólo vale la pena utilizar el cursor, cuando se tiene que leer los datos primero de todos modos, y luego quiere actualizar la misma fila que acaba de leer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top