[C con Clase] <MYSQL> optimizar consulta

Mariano Demarchi marchi.hh en gmail.com
Vie Ago 12 04:51:29 CEST 2011


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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20110811/cc06a99a/attachment.html>


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