Como otimizar a consulta MySQL (grupo e ordem)
Ei tudo, eu tenho uma consulta que precisa de otimização. Ele funciona, mas é um cão, desempenho sábio.
Está escrito assim:
SELECT *
FROM (
SELECT *
FROM views
WHERE user_id = '1'
ORDER BY
page DESC
) v
GROUP BY
v.session
Estou acompanhando visualizações para páginas diferentes e quero saber a página mais alta por sessão, para saber até que ponto elas clicaram (precisam ver todas as páginas até o final) em qualquer sessão.
Basicamente, o que estou tentando fazer é ORDER os resultados antes do GROUP. Que o acima alcançado, a um custo significativo.
Alguém que pode me dar um tapa na cabeça com como fazer isso? Obrigado rapazes!
Atualizar:
O Explain:
"1" "PRIMARY" "<derived2>" "ALL" \N \N \N \N "3545" "Using temporary; Using filesort"
"2" "DERIVED" "views" "index" \N "page" "5" \N "196168" "Using where"
O esquema:
ID int(8) unsigned (NULL) NO PRI (NULL) auto_increment select,insert,update,references
page int(8) (NULL) YES MUL (NULL) select,insert,update,references
user_id int(8) (NULL) YES (NULL) select,insert,update,references
session int(8) (NULL) YES (NULL) select,insert,update,references
created datetime (NULL) NO select,insert,update,references
Informação do Índice:
views 0 PRIMARY 1 ID A 196008 (NULL) (NULL) BTREE
views 1 page 1 page A 259 (NULL) (NULL) YES BTREE