de Martin LE TARNEC.

Delete


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.

Efectos colaterales de MVCC

El control de concurrencia multi-versiones (del inglés, multiversion concurrency control, MVCC) es un mecanismo de base de datos que permite el acceso concurrente y no bloqueante a los datos y una visión consistente de transacciones. Sin embargo, las implementaciones varían de una base de datos a otra, e incluso puede tener efectos considerables sobre el rendimiento.

Por ejemplo, la base de datos PostgreSQL sólo conserva la información de la versión (también llamada información de visibilidad) a nivel de tabla: eliminar un registro simplemente genera una marca de "borrado" en el bloque de la tabla. Por lo tanto, el rendimiento del DELETE en PostgreSQL no depende del número de índices en la tabla. La supresión física del registro de la tabla y el mantenimiento del índice relacionado se llevan a cabo sólo durante el VACCUM proceso de.

Acerca del autor

Foto de Markus Winand

Markus Winand enseña eficientemente SQL, en casa y online. Minimiza el tiempo de desarrollo utilizando moderno SQL y optimiza el tiempo de ejecución con indexación inteligente. Para ello también ha publicado el libro SQL Performance Explained.

“Use The Index, Luke” de Markus Winand se halla bajo licencia Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Aspectos legales | Contacto | SIN GARANTÍA | Marcas | Privacy | CC-BY-NC-ND 3.0 licencia