SQL WORLD
no meu artigo anterior, dei a ideia de como actualizar os registos na sql. Neste artigo eu gostaria de dar a idéia detalhada sobre a maneira de atualizar a maior parte dos registros no banco de Dados Oracle com vários exemplos.Gostaria de dar os exemplos de atualização da maior parte dos registros na oracle uma tabela com nome de cliente e outra tabela com nome de empresa.
quais são as diferentes formas de atualizar a maior parte dos registros na base de dados oracle?
Existem várias metodologias que estamos usando para atualizar a maior parte dos registros na base de dados oracle. Gostaria de discutir em pormenor as seguintes formas com exemplos da indústria da vida real. Estes exemplos lhe darão uma ideia clara sobre o processo de atualização da oracle em detalhes.
pressupostos:
estamos a assumir que existem duas tabelas – informação ao cliente – que é o nome do cliente que visita o site de comércio electrónico especificado. Há milhões de registros na tabela de clientes, mas estamos assumindo que existem 999999 registros na tabela de clientes. Há outra tabela chamada Customer_Entry que também tem 777777 registros. A chave primária chamada Customer_ID está em ambas as tabelas.tipos de actualizações :
1.Actualizar usando para o ciclo
2.Actualização tradicional (actualização individual dos registos)
3.Actualização a granel com Recolha a granel e para todas as declarações
4.Actualização directa SQL
5.Juntar a instrução para as actualizações gravar rapidamente
6.Actualizar usando o método de visualização incorporado.
é necessário executar todas as formas e verificar o desempenho e das diferentes declarações de atualização.Cenário 1 : Tradicional maneira de atualizar registros individuais e se comprometer após o loop
begin
for cusrsor_1 in (select * from customer)
update customer_ entry
set
customer_no = cursor_1.customer_ no, customer_name=cursor_ 1.customer_name, customer_product=c.customer_product onde
customer_id= c.customer_id;
end loop; commit;
end;
/PL/SQL procedimento foi concluído com sucesso.
decorreram: 00: 02: 42.36
Se você puder verificar o primeiro exemplo onde estamos tentando atualizar todos os registros usando para o loop e, em seguida, usar a declaração de commit. Se você puder executar o bloco PL SQL específico. Está a demorar cerca de 2 minutos e 42 segundos para completar o procedimento e actualizar os registos.
Scenario 2: Traditional way to update individual records and commit inside for loop
begin
for cusrsor_1 in (select * from customer)
update customer_entry
set
customer_no = cursor_1.customer_ no, customer_name=cursor_ 1.customer_name, customer_product=c.customer_product onde
customer_id= c.customer_id;
commit;
end loop;
end;
/PL/SQL procedimento foi concluído com sucesso.
decorreram: 00: 03: 58.39
Se pudermos verificar o processo e o tempo para executar os registos ou atualizar os registos na base de dados são aproximadamente 3 minutos e 58 segundos. Aqui o loop irá executar a declaração de commit após cada actualização de registo, de modo que o tempo para actualizar o registo é maior do que um único registo de commit.
Cenário 3 : ATUALIZAÇÃO em MASSA usando BULK COLLECT e PARA TODOS
declare
tipo de customer_t é a tabela de Cliente,%rowtype índice
pls_integer; l_customer_data customer_t;
begin Select *
em massa de recolher em l_customer_data do Cliente;
forall rec em 1 .. l_customer_data.Contagem
actualização personaler_ entry e set E. customer_no= l_customer_data (rec).customer_ no,
E. customer_name= L_ employee_data (rec).customer_name,
E. customer_product= L_ employee_data (rec).customer_product
where r. customer_id= L_ employee_data (rec).personalizado;
commit;
end;
pl/SQL procedimento concluído com sucesso.
decorreram: 00: 00: 53.55
o método de recolha a granel é mais rápido do que os métodos tradicionais. Precisamos criar uma variável de tipo onde podemos obter todos os dados do cliente e precisamos usar a declaração de coleta de massa em forall cláusula para que os registros na cláusula forall ou tabela especificada serão atualizados corretamente. Se pudermos ver o tempo decorrido é de cerca de 54 segundos, o que é mais rápido do que outros métodos.4. ATUALIZAÇÃO DIRETA do SQL
iniciar
atualização customer_entry ent
set (customer_no, customer_name, customer_product) =
( selecione customer_no, customer_name, customer_product do cliente c, onde c.customer_id= ent.customer_id)
where C. customer_id in (select customer_id from customer);
commit;
end;
PL/SQL procedure completed successfully.
decorreram: 00: 00: 58.22
a atualização direta levará 58 segundos para atualizar todos os registros. se podemos comparar isso com a granel recolher levou de 3 a 4 segundos extra para atualizar todos os registros
o Cenário 5 : INSTRUÇÃO MERGE – maneira mais Rápida de atualização em massa de registros
iniciar
merge em customer_entry er usando
cliente c
no (er.customer_id= C. customer_id)
Quando correspondido então
update set er.personal_number= C.número do cliente,
er.cutomer_name= C. customer_name,
er.customer_product= C. customer_product;
commit;
end;
PL/SQL procedimento concluído com sucesso.
decorreram: 00: 00: 36.23
a forma mais rápida de actualizar a maior parte dos registos é utilizando a declaração de junção. A instrução da junção levou 36 segundos para atualizar os registros rapidamente.
cenário 6: actualização utilizando o método de visualização em linha
begin
update
(
seleccione r. customer_id, R. customer_number, R. customer_name, R.customer_product,
e.customer_number cnum, e.customer_name cname, e.customer_product cprod
a partir de customer_entry r, cliente de e
, onde r.customer_id= e.customer_id
) 9
definir customer_number = cnum
customer_name= cname,
customer_product= cprod;
commit;
end;
PL/SQL procedimento foi concluído com sucesso.
Decorrido: 00:00:37.97
Com a utilização inline visualizar o método de atualização em massa será concluída em aproximadamente 38 segundos, que também é a forma rápida como a instrução Merge.o que aprendemos?
o pensamento de cada desenvolvedor SQL ou PLSQL é coletar a granel e para todas as declarações é melhor para fazer operações a granel. Se pudermos observar os detalhes em acima de 6 consultas a declaração de atualização SQL estaria dando o melhor desempenho do que coletar Bulk e para todos. Então tente usar o código SQL na API PL/SQL para fazer uma atualização rápida. Mas vai variar cenário para cenário para que você sempre pode verificar os cenários. Se quiser o desempenho mais rápido Tente escrever a instrução de junção ou a vista incorporada.
Leave a Reply