Creo que está confundiendo el concepto de un registro de transacciones en la base de datos. La función principal del registro de transacciones no es para restaurar filas antiguas; su trabajo es mantener la coherencia de la base de datos. Todas las modificaciones pasan por el registro de transacciones y no hay forma de evitarlo. Eso es bueno. Un registro de transacciones también se utiliza para hacer copias de seguridad y restauraciones puntuales de la base de datos, y se usa cuando se duplican dos servidores.
Si tiene eliminaciones que toman demasiado tiempo, primero debe buscar en un par de áreas.
1) ¿Tiene algún desencadenador DELETE que esté disparando en sus tablas? Si es así, podrían ser una fuente de lentitud.
2) ¿Ha configurado correctamente su DBA la base de datos, al mínimo, manteniendo el registro de transacciones y los archivos de datos en discos físicos separados?
3) ¿Tiene muchas llaves foráneas que se revisan? Por ejemplo, si tiene otra tabla que hace referencia a la tabla desde la que está eliminando, el servidor de la base de datos verificará cada eliminación con las tablas de referencia para asegurarse de que la declaración de eliminación no haga que esas otras tablas se vuelvan inconsistentes.
4) ¿Tiene demasiados índices o una carga de indexación demasiado alta en la tabla desde la que está eliminando? Cada fila eliminada corresponderá a una entrada en cada índice que se eliminará también, así que sea prudente sobre el uso que haga de los índices. ¿Están sus índices correctamente mantenidos?
5) ¿Lleva mucho tiempo buscar las filas que desea eliminar? Si la cláusula WHERE en su declaración DELETE es demasiado costosa, esto realmente ralentizará sus eliminaciones.Intente cambiar temporalmente su declaración DELETE a una instrucción SELECT y vea si esa consulta se ejecuta rápidamente. Si no es así, debe optimizar su declaración SELECT ya sea editándola, reestructurando sus tablas o añadiendo los índices apropiados. Luego, cambie la declaración a DELETE. El rendimiento debería mejorarse significativamente si la ejecución de su declaración SELECT correspondiente mejora durante su optimización.
Si tiene un gran trabajo por lotes ejecutando una gran cantidad de eliminaciones en sus tablas, es posible que desee desactivar temporalmente sus desencadenadores, o puede desear soltar y volver a crear sus índices y claves externas después de estos grandes lotes de eliminación. Eso también podría acelerar las cosas.
Hmm, interesante ... ¿guarda más de lo que está eliminando? ¿O menos? –
No lo sé. Pero en la mayoría de los casos, guardo menos y elimino más. Los registros que se eliminarán son demasiados en números y en muchas tablas. De hecho, es para una rutina de purga. –
En ese caso, podría ser interesante ver si puede insertar el "para mantener" en una tabla temporal, truncar la tabla principal e insertarla de nuevo en la principal. (Puede que necesite hacer algunas cosas extrañas para mantener las identidades, etc., pero podría valer la pena intentarlo, pero sospecho que alguien puede tener una mejor idea). –