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

Optimización de una consulta

Estas en el tema de Optimización de una consulta en el foro de Mysql en Foros del Web. Hola, estoy intentando optimizar una consulta que me devuelve los visitantes de mi página web. Yo guardo cada acción que hace un visitante en una ...
  #1 (permalink)  
Antiguo 12/01/2012, 04:18
 
Fecha de Ingreso: mayo-2011
Mensajes: 12
Antigüedad: 13 años, 6 meses
Puntos: 0
Optimización de una consulta

Hola, estoy intentando optimizar una consulta que me devuelve los visitantes de mi página web. Yo guardo cada acción que hace un visitante en una tabla, para contar las visitas totales que tengo realizo la siguiente consulta:

SELECT COUNT(DISTINCT ip_visitante) FROM visitas;

El problema es que la consulta tarda varios segundos en realizarse debido a que la tabla tiene varios millones de filas. He probado a añadir de KEY ip_visitante y usar InnoDB pero no he conseguido la suficiente velocidad. ¿Habría alguna forma de optimizar la consulta?
  #2 (permalink)  
Antiguo 12/01/2012, 05:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Optimización de una consulta

Igual te compensaria guardar en una tabla las ip donde ip sea PK de la tabla de manera que no se repetiran nunca y luego solo consultar el numero de registros de esa tabla pero eso afecta al diseño.... e intentar el insert en cada nueva session no en cada acción ...

sino

Crea un indice (no unico sobre ip_visitante) con nombre index_ip y luego elige la que mas rapido vaya

SELECT COUNT(DISTINCT ip_visitante) FROM visitas USE INDEX (index_ip);

SELECT COUNT(*) FROM (SELECT ip_visitante FROM visitas USE INDEX (index_ip) GROUP BY ip_visitante)

SELECT COUNT(*) FROM (SELECT DISTINCT ip_visitante FROM visitas USE INDEX (index_ip))

...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 13/01/2012, 18:18
 
Fecha de Ingreso: mayo-2011
Mensajes: 12
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Optimización de una consulta

Gracias, hoy implementé la consulta SELECT COUNT(DISTINCT ip_visitante) FROM visitas USE INDEX (index_ip); y tarda entre 1,5 y 1,6s. Pensaré a corto plazo la creación de una tabla que contenga por PK la ip, ya que el myisam en estas situaciones funcione realmente bien, ya que almacena en los metadatos la cantidad de filas totales que tiene la tabla y la consulta es instantánea.

Gracias

Un saludo

Etiquetas: optimización, select, tabla
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 16:58.