A diferencia del comando insert, el comando delete tiene una cláusula que puede utilizar todos los métodos descritos en el Capítulo 2, “El filtro where” para beneficiarse
directamente de la indexación. De hecho, el comando delete trabaja como un select seguido por una etapa adicional borrando todos los registros identificados.
La supresión actual de un registro es un proceso similar a insertar un nuevo registro; especialmente la supresión de las referencias dentro de los índices y las actividades para conservar los árboles de los índices equilibrados. La gráfica de rendimiento mostrado en la Figura 8.2 es, por lo tanto, muy similar a la mostrada para insert.
Figura 8.2 Rendimiento del DELETE por número de índices
En principio, se espera un mejor rendimiento para un delete sobre una tabla sin ningún índice de lo que lo es para un insert. Sin embargo, si no existe índice, la base de datos debe leer la tabla entera para encontrar los registros que deben eliminarse. Eso significa que la supresión de registros podría ser más rápido que la búsqueda. Por tal motivo, este caso no se muestra en la Figura 8.2.
Sin embargo, puede tener sentido ejecutar un comando delete sin índice así como ejecutar un comando select sin índice; en el caso de que se devuelva una gran parte de la tabla.
Sugerencia
Incluso los comandos delete y update tienen un plan de ejecución.
Un comando delete sin filtro where es un ejemplo evidente en el cual la base de datos no puede utilizar un índice, si bien es un caso especial que tiene su propio comando SQL: truncate table. Este comando tiene el mismo efecto que un delete sin filtro where, excepto que elimina todos los registros de una sola vez. Es muy rápido pero tiene dos efectos colaterales muy importantes: (1) se hace un
commit implícito (excepciones: PostgreSQL y SQL Server); (2) no ejecuta ningún trigger.
Si te gusta mi manera de explicar, te encantará mi libro.

