Duda rendimiento MySQL
Publicado por nifff (2 intervenciones) el 10/12/2015 10:43:01
Tengo una duda de rendimiento en sql, estoy ejecutando la consulta descrita abajo.
Hago varios left joins, con tablas que tienen algunas de ellas un numero muy elevado de registros para luego hacer un grouo by - count.
Las tablas de los joins, por ejemplo la de estadisticas_banners (guardamos informacion sobre que usuarios ha hecho click en que banners) tienen la siguiente estructura:
id, id_banner, id_usuario.
En este caso, a mi solo me interesa el total, ¿Mejoraría el rendimiento si en vez de hacer un count y un group by crease una vista con la siguiente estructura para hacer el join con ésta?:
id, id_usuario, total_banners_clickados.
Gracias!
Hago varios left joins, con tablas que tienen algunas de ellas un numero muy elevado de registros para luego hacer un grouo by - count.
Las tablas de los joins, por ejemplo la de estadisticas_banners (guardamos informacion sobre que usuarios ha hecho click en que banners) tienen la siguiente estructura:
id, id_banner, id_usuario.
En este caso, a mi solo me interesa el total, ¿Mejoraría el rendimiento si en vez de hacer un count y un group by crease una vista con la siguiente estructura para hacer el join con ésta?:
id, id_usuario, total_banners_clickados.
Gracias!
1
2
3
4
5
6
7
8
Select users.nombre, apellidos, email , count(distinct ep.id) as paginas_visitadas, count(distinct eb.id) as banners_clickados, count(distinct ficheros.id) as ficheros_subidos, count(distinct mensajes.id) as mensajes_enviados, count(distinct messages.id) as chats_enviados
from users
left join estadisticas_pagina ep on ep.user_id = users.id
left join estadisticas_banner eb on eb.user_id = users.id
left join ficheros on ficheros.subido_por = users.id
left join mensajes on mensajes.enviado_por = users.id
left join messages on messages.sender_id = users.id
where 1 = 1 and (ep.created_at between '2015-01-01' and '2015-12-10' or ep.created_at IS NULL) and (eb.created_at between '2015-01-01' and '2015-12-10' or eb.created_at IS NULL) and (ficheros.created_at between '2015-01-01' and '2015-12-10' or ficheros.created_at IS NULL) and (mensajes.created_at between '2015-01-01' and '2015-12-10' or mensajes.created_at IS NULL) and (messages.created_at between '2015-01-01' and '2015-12-10' or messages.created_at IS NULL) group by nombre, email, apellidos
Valora esta pregunta


0