Ver Mensaje Individual
  #4 (permalink)  
Antiguo 27/04/2015, 05:52
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Caso complejo de resolver

Cita:
No se si necesita mucha explicación el código
No necesita explicación, pero te recomiendo leer las Reglas del foro de Bases de DAtos: No se postean códigos, ni se4 tratan temas de programación en este foro. Sólo SQL.

DE todos modos, ya se vislumra una aprte del problema: Estás haciendo basicamente un full tablescan para sólo bucar una cantidada acotada de telefonos, lo que es absurdamente ineficiente.
Primero, un full tablescan es un espanto de consulta. Es el error que hace colapsar cualquier servidor de BBDD, sin importar mucho lo poderoso que sea.
No se hacen.

Además, si ya tienes una lista acotada de numeros, lo que debes hacer es buscar en la base esa lista de números, y no traer todos los números posibles menos el del consultante.

En esencia, lo que te conviene es:
1) tener debidamente indexada la tabla por numero de telefono.
2) pasar como parámetros los numeros de la lista obtenida. De hecho si puedes en ese mismo momento excluir el del usuario consultante, mejor, asi te evitas pasar basura.
Quedaría mas o menos así:
Código SQL:
Ver original
  1. SELECT *
  2. FROM usuarios
  3. WHERE telefono IN('11111111', '2222222222', 3333333333', ...) #Aca la lista de telefonos a buscar
  4. ORDER BY USER
Te en cuenta que es un error de diseño de sistema hacer consultas iterativas (una a la vez), para obtener N registros, cuando la base peude devolverte el conjunto entero en una sola.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)