Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Listar usuarios con misma IP

Estas en el tema de Listar usuarios con misma IP en el foro de Mysql en Foros del Web. Tengo una tabla de unos 28000 registros, son usuarios y me gustaria añadir un filtro para la administración para saber cuales de esos usuarios estan ...
  #1 (permalink)  
Antiguo 12/11/2013, 19:27
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Listar usuarios con misma IP

Tengo una tabla de unos 28000 registros, son usuarios y me gustaria añadir un filtro para la administración para saber cuales de esos usuarios estan conectandose desde una misma IP. Lógicamente guardo la ultima IP desde que la iniciaron sesion en la web.

Googleando he sacado esta consulta pero al ejecutarla tarda 17 minutos en terminar, no logro comprender el porque.

Código SQL:
Ver original
  1. SELECT
  2.   usuario,
  3.   ultima_ip
  4. FROM
  5.   usuarios
  6. WHERE
  7. ultima_ipIN (
  8. SELECT ultima_ip
  9. FROM usuarios
  10. GROUP BY ultima_ip
  11. HAVING COUNT(id) > 1
  12. ) ORDER BY ultima_ip, usuario'

Lo que haria en teoria es devolverme los usuarios que su ultima IP se halle en la consulta en la que agrupo las IP que tengan mas de un registro.
  #2 (permalink)  
Antiguo 12/11/2013, 19:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Listar usuarios con misma IP

La consulta está básicamente bien pensada, pero GROUP BY es una cláusula algo antiperformantica cuando tienes muchos registros.
prueba creando un índice sobre ese campo, de ese modo puede mejorar la performance, sin necesidad de otros artilugios.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 12/11/2013, 19:35
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Respuesta: Listar usuarios con misma IP

La cuestion es que la subconsulta ejecutada por si sola no tarda nada en ejecutarse.

EDIT: Le he metido tanto al campo de IP como a otros por necesidad un indice KEY para probar y sigue tardando excesivo tiempo.
  #4 (permalink)  
Antiguo 13/11/2013, 03:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Listar usuarios con misma IP

¿cómo guardas la IP, en qué tipo de campo?
Mira aquí:
http://dev.mysql.com/doc/refman/5.0/...functions.html
  #5 (permalink)  
Antiguo 13/11/2013, 06:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Listar usuarios con misma IP

Por un lado: ¿Cuántos registros tienes en esa tabla, y qué tipo de campo y longitud estás usando?
Por otro: ¿A cuánto tiempo llamas "excesivo"?
Dependiendo del contexto, el rango de eso puede ser muy variado...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 13/11/2013, 08:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Listar usuarios con misma IP

Código MySQL:
Ver original
  1.   u.usuario,
  2.   u.ultima_ip
  3.   usuarios u INNER JOIN (SELECT ultima_ip
  4.       FROM usuarios
  5.       GROUP BY ultima_ip
  6.       HAVING COUNT(id) > 1) Sbc
  7. ON Sbc.ultima_ip=u.ultima_ip
  8. ORDER BY u.ultima_ip, u.usuario

Si la subconsulta corre intenta esto, creo que es equivalente y no usas IN() que siempre es lento.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: ip, registro, select, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:38.