MySQL Forums
Forum List  »  Spanish

UPDATE - Actualizando acumulados
Posted by: Jordi Tarruella
Date: June 11, 2007 09:43AM

Hola amigos!

Tengo dos tablas con la misma estructura.
En una se guardan todas las acciones de un usuario por fecha guardando un valor y en la otra se guardan los acumulados que se van calculando periodicamente.

T_DATA - con más de 500k registros
T_ACUM - donde se almacenan los acumulados

Para rellenar por primera vez T_ACUM hago:

INSERT INTO T_ACUM
(ID1, LASTACCESS, TOTAL_SCORE)
SELECT ID1, MAX(ACCESS), SUM(SCORE)
FROM T_DATA
GROUP BY ID1

después para ir actualizando los acumulados:

UPDATE T_ACUM TA
SET TA.LASTACCESS =
( SELECT MAX(TD.ACCESS) LSTACC
FROM T_DATA TD
WHERE TD.ID1 = TA.ID1
GROUP BY TD.ID1
HAVING TD.ACCESS > TA.LASTACCESS
)
, TA.TOTAL_SCORE = TA.TOTAL_SCORE +
( SELECT SUM(TD.SCORE) TOTSCR
FROM T_DATA TD
WHERE TD.ID1 = TA.ID1
GROUP BY TD.ID1
HAVING TD.ACCESS > TA.LASTACCESS
)

La actualización funciona bien péeeeero... se emplea demasiado, excesivo tiempo!

Cómo podría mejorar este proceso?
Estoy intentando cosas como la siguiente pero no funcionan...

UPDATE T_ACUM TA
SET (TA.LASTACCESS, TA.TOTAL_SCORE)
VALUES
( SELECT MAX(TD.ACCESS), SUM(TD.SCORE)
FROM T_DATA TD
WHERE TD.ID1 = TA.ID1
GROUP BY TD.ID1
HAVING TD.ACCESS > TA.LASTACCESS
)

Alguna idea?
Hay alguna manera de actualizar masivamente que no sea CAMPO por CAMPO como se hace en el INSERT¿?

Mil gracias!

Jordi

Options: ReplyQuote


Subject
Views
Written By
Posted
UPDATE - Actualizando acumulados
7659
June 11, 2007 09:43AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.