Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/10/2013, 10:43
Avatar de luisvasquez
luisvasquez
 
Fecha de Ingreso: diciembre-2003
Ubicación: Venezuela
Mensajes: 879
Antigüedad: 20 años, 5 meses
Puntos: 6
Pregunta Insert ignore para optimizar?

Amigos de FDW,

Ante todo un saludo.

Estoy tratando de optimizar un script que funcionaba bien, pero que de pronto comenzó a colapsar cuando la tabla pasó los 100 mil registros.

Basicamente lo que hace es preguntar si existe un registro en la tabla y sino, pues lo inserta, pero la cosa se ha puesto lenta porque hace un ciclo para pregunta.

Un poco del código
Código MySQL:
Ver original
  1. SELECT COUNT(*) FROM followers
  2. WHERE twitterid = :id and usuario_master =  '$cuenta'
  3.  
  4. INSERT INTO followers SET twitterid = :id, usuario_master = "'.$cuenta.'", update_dt = NOW()

Cita:
Editado: Código de programación no permitido en Foros de BBDD. Leer las normas del foro, por fvor.
Como pueden ver, hay un ciclo foreach (para un arreglo de 100 mil entradas) y en cada ciclo pregunta si el valor está o no, para insertarlo.

Pensé en usar INSERT IGNORE para evitar el SELECT COUNT(*), más o menos asi:

Código MySQL:
Ver original
  1. INSERT IGNORE INTO followers
  2. SET twitterid = :id, usuario_master = "'.$cuenta.'", update_dt = NOW()

Cita:
Editado: Código de programación no permitido en Foros de BBDD. Leer las normas del foro, por fvor.
sin embargo, debo ejecutar una función después de un insert efectivo (la función mensaje_directo) y en este caso dicha función se ejecutaría AUNQUE LA CLAVE ESTÉ DUPLICADA y eso sería desastroso.

Debo poder ejecutar el INSERT IGNORE y luego poder evaluar ¿Se inserto el registro? para poder decidir si ejecutar la función o no.

Espero haberme explicado y agradeciendo de antemano sus comentarios.

Luis Vásquez

Última edición por gnzsoloyo; 12/10/2013 a las 12:51 Razón: Código de programación no permitido en Foros de BBDD. Leer las normas del foro, por fvor.