Quiero eliminar aproximadamente el 90% de las filas de una tabla de más de un millón. ¿Hay algo que pueda hacer para que esto sea más rápido? p.ej. si enciendo el modo de recuperación simple, ¿esto ayudará?Cómo hacer un DELETO rápido de muchos datos de una tabla grande (servidor sql)
Respuesta
Copie las filas que no desea eliminar en una tabla temporal utilizando select into, y luego truncate en lugar de eliminar la tabla. Copie las filas nuevamente en la tabla anterior. Recuerde primero drop contraints.
Si tiene columnas de identidad, después de renter los datos, use algo como esto para resembrar la tabla.
declare @seed int
select @seed = max(identity_col)+1 from tableName
DBCC CHECKIDENT (orders, table_name, @seed)
Dado que desea eliminar el 90% de filas, que podría ser más rápida de SELECT INTO esos 10% filas que desea conservar en una tabla nueva.
Si no puede copiar el resto a otra mesa, a continuación, truncar y copiar de nuevo ...
... dejando caer los índices es lo único que puede hacer la programación inteligente. En este caso, bajar índices y recrearlos puede ayudar.
... u obtén un subsistema de disco más rápido, principalmente para los datos.
El modo de recuperación no funciona: el modo de recuperación indica que el registro se puede eliminar inmediatamente después de la confirmación (puede estar implícito), pero no hay nada que evite que las entradas de registro se escriban.
Agregue un indicador IsDeleted (BIT)
, configúrelo en 1 para esos 90% y cree una vista sobre su tabla que solo muestre las filas con IsDeleted=0
.
Eliminar es siempre a) una operación que consume muchos recursos, yb) destruye cualquier posibilidad de responsabilidad: intentaría evitarla si fuera posible, por ambas razones (rendimiento y destrucción de datos). Utilice el enfoque de "eliminación suave" en su lugar.
- 1. SQL - muchos-a-muchos tabla principal clave
- 2. Cómo agrego una columna a la tabla del servidor sql grande
- 3. Selección lenta de SQL Server de la tabla grande
- 4. ¿Cómo creo eficientemente subconjuntos lógicos de datos en una tabla de asignación de muchos a muchos?
- 5. 'Caché' de una tabla grande en ASP.NET
- 6. ¿Cómo manejar una tabla grande en MySQL?
- 7. ASP.net utilizando un formulario para insertar datos en una tabla de servidor sql
- 8. De .net ¿cómo enviar muchos "lotes" de SQL al servidor Sql sin muchas vueltas?
- 9. Servidor SQL, usando una tabla como cola
- 10. .NET Datos dinámicos Muchos a muchos con LINQ to SQL
- 11. Servidor SQL: Comprobando el tipo de datos de una columna
- 12. ¿Es posible insertar una tabla de datos VB.NET completa en un servidor SQL a la vez
- 13. Eliminar duplicados de una tabla grande
- 14. ¿Cómo se agrega una columna NOT NULL a una tabla grande en SQL Server?
- 15. crear tabla desde otra tabla en una base de datos diferente en el servidor sql 2005
- 16. Linq a SQL y modelo de base de datos grande
- 17. Cómo asignar la lista de muchos a muchos en Hibernate con una tabla de enlaces
- 18. Tabla temporal del servidor Sql
- 19. Servidor SQL notifica al servidor web del cambio de tabla
- 20. Tabla de asignación de muchos a muchos
- 21. ¿Cómo hacer una tabla de solo lectura en SQL Server?
- 22. Cómo estructurar una tabla extremadamente grande
- 23. Cómo hacer un empujón rápido con Mercurial
- 24. Cómo generar un diagrama de un esquema de base de datos muy grande (SQL Server)
- 25. EntityFramework Misma tabla Muchos a muchos Relación
- 26. ¿Cómo seleccionar datos de una tabla desde otra base de datos en SQL Server?
- 27. Eliminación de registros en la tabla de muchos a muchos
- 28. obteniendo datos de una relación muchos a muchos db
- 29. Actualizar tabla de base de datos PostgreSQL MUY GRANDE eficientemente
- 30. ¿Cómo clasifica el servidor SQL sus datos?
¡agradable! Tengo columnas de identidad, así que tendría que lidiar con eso, pero está bien. – Rory
+1 - Esto está mínimamente conectado al menos en 2005+ (no estoy seguro de las versiones anteriores) por lo que debe ser muy rápido. Tenga en cuenta el tiempo necesario para reconstruir los índices. – JNK