Jak zoptymalizować zapytanie MySQL (grupa i zamówienie)
Hej wszystkim, mam pytanie wymagające optymalizacji. Działa, ale jest psem, mądrym w wykonywaniu.
To brzmi tak:
SELECT *
FROM (
SELECT *
FROM views
WHERE user_id = '1'
ORDER BY
page DESC
) v
GROUP BY
v.session
Śledzę widoki na różnych stronach i chcę znać najwyższą stronę na sesję, aby wiedzieć, jak daleko przeszli (są zobowiązani do przeglądania każdej strony aż do końca) w dowolnym podanym sesja.
Zasadniczo staram się zamówić wyniki przed GRUPĄ. Co powyższe osiąga przy znacznych kosztach.
Ktokolwiek może mnie uderzyć w głowę, jak to zrobić? Dzięki chłopaki!
Aktualizacja:
Wyjaśnienie:
"1" "PRIMARY" "<derived2>" "ALL" \N \N \N \N "3545" "Using temporary; Using filesort"
"2" "DERIVED" "views" "index" \N "page" "5" \N "196168" "Using where"
Schemat:
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
Informacje o indeksie:
views 0 PRIMARY 1 ID A 196008 (NULL) (NULL) BTREE
views 1 page 1 page A 259 (NULL) (NULL) YES BTREE