Domanda

Devo sostituire più di 20.000 nomi con nuovi nomi che ho creato dato il CodeID.

Ad esempio: devo aggiornare tutte le righe che contengono " cane " (che ha un ID codice di 1) con " cat " e aggiorna tutte le righe che contengono " cavallo " (che ha un ID codice di 2) con "uccello", ecc.

Prima istruzione SQL: UPDATE animalTable SET cDescription = " cat " DOVE CodeID = 1

2a istruzione SQL: UPDATE animalTable SET cDescription = " bird " DOVE CodeID = 2

Queste dichiarazioni funzionano, ma ho bisogno di un modo più veloce per farlo perché ho oltre 20.000 nomi.

Grazie in anticipo.

È stato utile?

Soluzione

Questo è il modo più veloce per farlo.

O vuoi aggiornare tutti i record con un singolo comando?

puoi fare un aggiornamento con un join (Sintassi fissa ... Non ho usato questo da un po 'di tempo)

UPDATE animalTable 
INNER JOIN CodeTable ON animalTable.CodeID = CodeTable.ID 
SET animalTable.cDescription = CodeTable.Description_1;

Un'altra opzione è quella di dividere gli aggiornamenti in lotti più piccoli, questo ridurrà il tempo in cui la tabella è bloccata ... Ma il tempo totale degli aggiornamenti richiederà più tempo (è solo un miglioramento delle prestazioni prestabilite) Puoi farlo aggiornando solo determinati intervalli di ID in ciascun batch.

Inoltre potresti avere quei dati in una tabella separata. Poiché i dati non sono normalizzati. Spostalo in modo che sia più normalizzato.

Altri suggerimenti

Potresti voler creare una tabella temporanea che contenga i valori di traduzione e aggiornarla in base a quello.

Ad esempio:

create table #TRANSLATIONS
(
    from   varchar(32),
    to     varchar(32)
)

Quindi, inserire i valori di traduzione:

insert into #TRANSLATIONS (from,to) values ('cat','dog')

Infine, aggiorna in base a questo:

update MYTABLE
set    myvalue = t.to
where  myvalue = t.from
from   MYTABLE m,
       #TRANSLATIONS t

(Non testato, in cima alla mia testa).

Puoi utilizzare una CASE per aggiornarla

UPDATE animaltable SET cDescription = CASE codeID WHEN 1 THEN 'cat' WHEN 2 THEN 'bird' .... END

Supponiamo di avere un file come questo:

1,cat
2,bird
...

Scriverei uno script che legge quel file ed esegue un aggiornamento per ogni riga.

In PHP:

$f = fopen("file.csv","r")
while($row = fgetcsv($f, 1024)) {
    $sql = "update animalTable set cDescription = '".$row[1]."' where CodeID = ".$row[0];
    mysql_query($sql);
}
fclose($f);

Quello che potresti fare per accelerare è aggiornare solo quei record che non hanno già il valore che vuoi assegnare.

UPDATE animalTable SET cDescription = "cat" WHERE CodeID = 1 AND cDescription != "cat"

Questo approccio consente al comando di aggiornare solo quei record che non sono già "cat".

Disclaimer: odio i gatti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top