[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

migliore scelta per aggiornare un database senza rallentare



Un po'ot ma penso che darà da discutere:

ho un database (mariadb) con una tavola con tanti (circa 30) campi e circa 500000 righe.
Mi interessano tre colonne: EI ET e ED (numerici)
ogni giorno, alle 3 del mattino, debbo effettuare la seguente operazione:
  per ogni riga dove ED è diverso da zero e da null :
     EI=EI+ED ;
  se dopo la operazione EI è compreso tra +K e -K (costante nota) allora
     EI=ET; ED=0 ;
Vincoli: la operazione non deve bloccare l'accesso al database almeno in lettura
 e durare il meno possibile;
il campo ED diverso da zero e da null dovrebbe essere presente solo in circa 7000 record;

Esiste un comando sql che mi possa fare questo (la prima parte è facile, con un semplice where ED, ma la seconda un po'più difficile visto che dovrebbe scorrere una seconda volta il DB.
Quale è il suggerimento più "efficiente"?
(oppure è meglio estrarre i record che hanno ED diverso da 0 e da null, fare le operazioni da php o perl o anche C e e riscrivere i due valori in blocco ? cosa costa meno ?) (per inciso: sarebbe anche possibile aggiungere, solo la prima volta, un qualcosa che se ED o EI sono null li inizializza a 0 e ET, ma preferirei non farlo ...)


--
Leonardo Boselli
Dipartimento ingegneria Civile e Ambientale UNIFI
tel +39 0552758808



Reply to: