2010-04-09 11 views
6

¿Es más eficiente ejecutar siempre una consulta DELETE de forma predeterminada si existe o no una entrada, por ejemplo para eliminar un nombre de usuario después de una determinado período de tiempo (DELETE * from table WHERE username='user'), o debería comprobar primero si existen las filas que se eliminarán utilizando una consulta SELECT y marcando mysql_num_rows.¿Es más eficiente ejecutar siempre una consulta de eliminación o verificar si existe esa información primero?

¿Qué usa más recursos de procesador en el lado del servidor?

Obviamente, un enfoque contiene más código, pero me preguntaba si ciertas operaciones de mysql usaban mucho más CPU que otras.

Respuesta

10

Eliminar es más eficiente ya que el sistema tarda tanto tiempo (y literalmente hace exactamente el mismo trabajo) buscando filas para eliminar como lo hubiera hecho en seleccionar.

Sin embargo, si desea tener un arranque de lógica especial si se eliminaron cero filas, puede utilizar la función ROW_COUNT() y comprobar si es cero después de la eliminación.

También, vea el related answer here.

+0

Gracias DVK agradecemos su respuesta. – Scarface

+0

De nada. Y bienvenidos al maravilloso mundo del rendimiento de la base de datos :) – DVK

3

No hay necesidad de comprobarlo, porque el MySQL lo hará de todos modos. La comprobación será una consulta más que realmente no necesita, debido a la forma en que DELETE funciona, ya es una consulta de comprobación por sí sola y, si se encuentra, el registro se eliminará.

+0

gracias, lo agradezco – Scarface

+1

Y, además de eso, si su operación de verificación/eliminación no es atómica (que es una eliminación), se corre el riesgo de que alguien inserte después del cheque y antes de la eliminación (que ' no lo estoy haciendo ya que su cheque ahora está trabajando con información obsoleta). – paxdiablo

-2

Sin tener en cuenta la eficiencia de tiempo y el tiempo de ejecución y mirando la legibilidad del programa, es mucho más fácil de entender y lógicamente más fácil de leer si tiene funciones para verificar primero si existen datos en lugar de llamar directamente a la función de eliminación. De esta forma, puede agregar funcionalidades de verificación adicionales o opciones de confirmación.

+4

No estoy de acuerdo con usted aquí. Creo que se entiende bastante bien que una eliminación normal tiene "éxito" incluso si no se ven afectados registros en el terreno de operación basado en conjuntos. Además, si va a verificar primero, introduce todo tipo de problemas transaccionales de los que tendrá que preocuparse. Y, por supuesto, el rendimiento alcanzó ... –

0

Creo que se entiende bastante bien una eliminación normal para "tener éxito" incluso si no se ven afectados registros en el área de operación basada en conjuntos.

Cuestiones relacionadas