2010-07-13 12 views
10

Estaba revisando un código y me di cuenta de que UPDATE LOW_PRIORITY y DELAYED INTO se usaban para insertar y actualizar la base de datos. ¿Cuál es el uso de este código? ¿Por qué tenemos que usar esto?ventajas de UPDATE LOW_PRIORITY e INSERT DELAYED IN

any Ideas ??

¿Debo usarlo en cada inserción y actualización para varias tablas en la misma base de datos?

Respuesta

19

Con la palabra clave LOW_PRIORITY, la ejecución de la ACTUALIZACIÓN se retrasa hasta que ningún otro cliente esté leyendo en la tabla. Normalmente, los clientes de lectura se ponen en espera hasta que finaliza la consulta de actualización. Si desea dar prioridad a los clientes de lectura sobre la consulta de actualización, debe usar LOW_PRIORITY.

La opción DELAYED para la instrucción INSERT es una extensión de MySQL para SQL estándar que es muy útil si tiene clientes que no pueden o no necesitan esperar a que se complete el INSERT. Esta es una situación común cuando utiliza MySQL para el registro y también periódicamente ejecuta sentencias SELECT y UPDATE que tardan mucho tiempo en completarse.

+13

También tenga en cuenta: A partir de MySQL 5.6.6, INSERT DELAYED está en desuso, y se eliminó en 5.7 – Petah

0

Si sus ACTUALIZACIONES en MySQL requieren un entorno de lectura intensiva de hasta 1800 segundos, es aconsejable utilizar UPDATE LOW_PRIORITY.

+4

¿Por qué 1800 segundos? Podrías haber explicado tu razonamiento. –

+0

@Dharma estaba hablando de _ [wait_timeout] (http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_wait_timeout) _ y _ [interactive_timeout] (http: // dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_interactive_timeout)_ variables del sistema que dependen del indicador _CLIENT_INTERACTIVE_ del cliente. Sin embargo, el valor predeterminado de estas variables es 28800 (8 h) y no 1800. –

-1

Esta necesidad de usar tiene una gran carga en el servidor. Y ahora que algunos ACTUALIZAR o INSERTAR ahora es prioridad alta y puede actuar en carga.

Exp. SQL que generan algunas estadísticas o elementos superiores. Los están lentamente y no necesitan ejecutarse inmediatamente.

7

LOW_PRIORITY, HIGH_PRIORITY y DELAYED solo son útiles en unos pocos círculos. Si no tienes una carga GRANDE, no pueden ayudarte. Si lo has hecho, no hagas nada que no entiendas completamente.

Todas estas opciones solo funcionan con MyISAM, no con InnoDB, no con vistas.

DELAYED no funciona con tablas particionadas, y está claramente diseñado para dataware house. El cliente envía el inserto y luego lo olvida, sin esperar el resultado. Por lo tanto, no sabrá si el inserto tuvo éxito, si hubo valores duplicados, etc. Nunca debería usarse, mientras que otros subprocesos podrían SELECT de esa tabla, porque un inserto retrasado nunca es concurrente.

LOW_PRIORITY espera hasta que ningún cliente acceda a la tabla. Pero si tiene un alto tráfico, puede esperar hasta que la conexión expire ... eso no es lo que quiere, supongo :)

Además, tenga en cuenta que DELAYED se eliminará en Oracle MySQL 5.7 (pero no en MariaDB)

Cuestiones relacionadas