Recentemente, um amigo me perguntou, ele disse que era muito lento para ele deletar milhões a dezenas de milhões de dados no SQLSERVER. Eu o ajudei a analisar e fiz algumas sugestões como segue. Pode ser útil para muitas pessoas, e é. também há muito tempo. Ainda não escrevi um blog, vamos discutir isso juntos.
Se o espaço do seu disco rígido for pequeno e você não quiser definir o log do banco de dados no mínimo (porque deseja que outros logs normais ainda sejam). registrado), e você tem requisitos de velocidade relativamente altos e limpa todos os dados, sugiro que você use turncate table1, porque truncar é uma operação DDL, não gera rollback e é mais rápido se não gravar logs, então se houver. é um incremento automático, será restaurado para 1 e a exclusão gerará rollback. Se você excluir uma tabela com uma grande quantidade de dados, a velocidade será muito lenta, ocupará muitos segmentos de rollback e também. registrar logs de nível G, é claro, e se houver exclusões condicionais, como onde time<'2006-3-10' Posso usar delete sem registrar , o mecanismo do SQL Server foi projetado para registrar Delete? operações. Até o momento não há como forçar que certas instruções não sejam registradas no log Se Delete Table1 onde Time < '2006-3-10' for executado, o registro do log será muito grande (3-4G) porque há muitos. registros envolvidos. Se possível, sugiro o seguinte método:
selecione os registros que você precisa manter em uma nova tabela. Se você usar o modo de recuperação total
Dependendo do número de registros SELECT INTO, o log poderá ser maior.
Selecione * na Tabela2 da Tabela1, onde Time> = '2006-03-10'
e, em seguida, trunque diretamente a Tabela1. Nenhum registro ocorrerá, independentemente do modelo de recuperação
Truncar a tabela Table1
e finalmente renomear Table2 para Table1
EC sp_rename 'Tabela2', 'Tabela1'
Fonte: BLOG:coluna do domino