Ver Mensaje Individual
  #8 (permalink)  
Antiguo 07/01/2010, 10:05
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 9 meses
Puntos: 300
Respuesta: Como Obtimizar esta Consulta?

SELECT c.PAIS, count( * ) totpaises FROM tablaIPs INNER JOIN (SELECT u.numero FROM tablausuariosonline u GROUP BY u.numero)t1 ON t1.numero >= tablaIPs.start AND t1.numero <= tablaIPs.end INNER JOIN tablapaises c ON c.name = tablaIPs.cn GROUP BY tablaIPs.cn ORDER BY totpaises DESC

Esta consulta la tengo funcionando y aunque es algo lenta, no lo es tanto. Es importante que tengas indexados los campos que enlazas. Me refiero a c.numero, tablaIPs.start y tablaIPs.end. Observa que añado otro INNER JOIN con una tablapaises donde tengo los nombres de los países en español. Esta es la idea. Lo que no entiendo en tu consulta es el LEFT JOIN, que seguro que la ralentiza demasiado y no comprendo su función.
Intenta adaptar la consulta incluyendo los nombres de tus campos.
Te quito el último INNER JOIN
Código SQL:
Ver original
  1. SELECT tablaIPs.country, COUNT( * ) totpaises FROM tablaIPs
  2.  INNER JOIN (SELECT u.numero FROM tablausuariosonline u GROUP BY u.numero)t1
  3.  ON t1.numero >= tablaIPs.START AND t1.numero <= tablaIPs.END
  4.  GROUP BY tablaIPs.cn ORDER BY totpaises DESC

No olvides indexar los start y end.

Última edición por jurena; 07/01/2010 a las 11:56