Atualmente, estou atualizando uma tabela com milhões de registros, já faz 4 dias e a consulta ainda está em execução.
Eu verifiquei o monitor de atividade mostra que a consulta está em execução.
No log de eventos, não há erros.
Desempenho:
- Tempdb no disco A (850 gb de espaço livre)
- arquivo de banco de dados no disco B (espaço livre de 750 gb)
- 16 GB de RAM
Por favor, sugira-me o que devo fazer?
A pergunta
UPDATE
dbo.table1
SET
costPercentage = ISNULL(t2.PaymentIndex, 1.0),
t2.TopUp_Amt = (ISNULL(t2.PaymentIndex, 1.0) - 1.0)
* ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00),
Total_Tariff_Inc_t2 = ISNULL(t2.PaymentIndex, 1.0)
* ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00)
FROM
dbo.table2 t2
WHERE
LEFT(dbo.test1.procodet, 3) = LEFT(t2.ProviderCode, 3) COLLATE database_default
fonte
Primeiro, altere a consulta para:
Conforme indicado pelo primeiro post de Jeff Moden nessa discussão , sua consulta é muito semelhante à que ele alertou sobre o "efeito Halloween".
Depois disso, essas expressões LEFT devem ser indexadas. A resposta do gbn fornece as dicas de como fazer isso.
fonte