[C con Clase] <MYSQL> optimizar consulta

Gastón Borysiuk gaston.borysiuk en gmail.com
Vie Ago 12 19:46:45 CEST 2011


Hola Lista


Gracias por las respuestas, veo varias cosas, unas las pensé otras no
comprendo, por ahí me dijeron de utilizar triggers, no veo como me puede
ayudar.


Por otro lado Mariano, no es problema lo del IN, veo que estas generando
una cadena que luego se ejecutaría de una sola vez y justamente a eso me
refería si es mucho mas rápido hacer TODO un str para el query y
ejecutarlo una sola vez como si fuera un dump.


Tengo que chequear que tanta demora tengo.



Gracias!

El jue, 11-08-2011 a las 23:51 -0300, Mariano Demarchi escribió:
> Podés armar una sola consulta con todos los valores mediante un IN o
> un OR, siempre y cuando no sean demasiados. Por ej.:
> 
> 
> 
> if (size_array_soap > 0)
> {
>   strSQL = "INSERT INTO tabla_compartida (campo1, campo2, campo3)
> SELECT campo1, campo2, campo3 FROM tabla_interna WHERE id IN (";
> 
> 
>   for (i = 0 ; i < size_array_soap - 1 ; i++)
>   {
>      strSQL += tostr(array_soap[$a]);
> 
>      strSQL += ",";
>   }
>   strSQL += tostr(array_soap[$a]);
>   strSQL += ")"
> }
> 
> 
> 
> Esto es c++, pero supongo que php te debe permitir algo similar.
> Tirar esta SQL te ahorraría todo el trabajo de abrir la conexion con
> la bd y el parseo, pero como sentencia no es muy eficiente. Ademas el
> IN suele tener limites en la cantidad de elementos que se pueden poner
> dentro, tené en cuenta que se termina compilando como un OR al menos
> en Oracle.
> Es cuestión de probar si la ganancia es mayor que la pérdida por tener
> tantos OR's.
> 
> 
> Saludos
> 
> 
> El 11 de agosto de 2011 17:40, Diego <diegoartesanal en gmail.com>
> escribió:
>         ¿No deberías usar triggers (disparadores)? . Existen para
>         casos como estos.
>         
>         El 11 de agosto de 2011 15:12, Gastón Borysiuk
>         <gaston.borysiuk en gmail.com> escribió:
>         
>                 Hola Listeros
>                 
>                 
>                 Bueno como me dijo el moderador que no tienen la lista
>                 de mysql hago la
>                 consulta acá.
>                 
>                 Tengo un dilema, no tiene que ver con C, es en php,
>                 pero al margen
>                 explico:
>                 
>                 Yo realizo consultas mediante SOAP a un servidor, me
>                 devuelve los datos
>                 en un array.
>                 
>                 Yo para mostrar estos registros los tengo que meter en
>                 la DB PERO no
>                 todos los registros se tienen que mostrar solo los ids
>                 que coincidan en
>                 mi DB. Supongamos de 1000 resultados solo tengo
>                 relacionados con mi
>                 sistema unos 350.
>                 
>                 hice un bucle que haga un insert solo si existe, una
>                 onda así:
>                 
>                 
>                 INSERT INTO tabla_compartida (campo1, campo2, campo3)
>                 SELECT campo1,
>                 campo2, campo3 FROM tabla_interna WHERE id LIKE
>                 array_soap[$a];
>                 
>                 
>                 Claro, esto me hace demorar mucho la consulta.
>                 
>                 Estaba pensando en armar un solo query, como si fuera
>                 un mysql dump y
>                 que ejecute todo de una, pero no se si no me va a
>                 petar el mysql a los
>                 caños, si va a ser mas rápido.
>                 
>                 
>                 Si a alguien se le ocurre algo que me chifle por
>                 favor.
>                 
>                 
>                 
>                 Gracias, Saludos!
>                 
>                 
>                 _______________________________________________
>                 Lista de correo Cconclase
>                 Cconclase en listas.conclase.net
>                 http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>                 Bajas:
>                 http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>         
>         
>         _______________________________________________
>         Lista de correo Cconclase Cconclase en listas.conclase.net
>         http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>         Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> 
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ






Más información sobre la lista de distribución Cconclase