Pergunta

Eu preciso substituir mais de 20 000 nomes com novos nomes que eu criei dada a CodeID.

Por exemplo: Eu preciso atualizar todas as linhas que contêm "dog" (que tem um CodeID de 1) com o "gato", e atualizar todas as linhas que contêm "cavalo" (que tem um CodeID de 2) com o "pássaro" , etc.

1º instrução SQL: UPDATE animalTable SET cDescription = "gato" ONDE CodeID = 1

2 instrução SQL: UPDATE animalTable SET cDescription = "pássaro" ONDE CodeID = 2

Estas declarações trabalhar, mas eu preciso de uma maneira mais rápida de fazer isso, porque eu tenho mais de 20 000 nomes.

Agradecemos antecipadamente.

Foi útil?

Solução

Isso é o modo mais rápido você pode fazê-lo.

Ou você quer atualizar todos os registros em um único comando?

Você pode fazer uma atualização com uma junção (Fixed Sintaxe ... Não reembolsaram utilizado este em um tempo)

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

Outra opção é dividir as atualizações em lotes menores, isso irá reduzir o tempo a tabela está bloqueada ... Mas o tempo total das atualizações vai demorar mais tempo (Seu apenas uma melhoria de desempenho precieved) Você pode fazer isso, atualizar apenas determinados intervalos de identificação em cada lote.

Além disso, você poderia ter esses dados em uma tabela separada. Uma vez que os dados não são normalizados. Afastá-lo assim que sua mais normalizada.

Outras dicas

Você pode querer criar uma tabela temporária que contém os valores de tradução e atualização com base nisso.

Por exemplo:

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

Em seguida, insira os valores de conversão:

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

Finalmente, atualização com base em que:

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

(não testado, em cima da minha cabeça).

Você pode usar uma declaração CASE para atualizá-lo

Atualização animaltable SET cDescription = CASE codeID QUANDO 1 ENTÃO 'gato' QUANDO 2 THEN 'pássaro' .... END

Supposind você tem um arquivo como este:

1,cat
2,bird
...

eu iria escrever um script que lê esse arquivo e executa uma atualização para cada linha.

Em 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);

O que você poderia fazer para acelerá-lo é atualizar apenas os registros que ainda não têm o valor que você deseja atribuir.

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

Essa abordagem faz com que o comando só atualizar os registros que já não são 'gato'.

Disclaimer:. Eu odeio gatos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top