У меня следующий запрос:
SELECT AVG(time) FROM
(SELECT UNIX_TIMESTAMP(max(datelast)) - UNIX_TIMESTAMP(min(datestart)) AS time
FROM table
WHERE id IN
(SELECT DISTINCT id
FROM table
WHERE product_id = 12394 AND datelast > '2011-04-13 00:26:59'
)
GROUP BY id
)
as T
Запрос получает наибольшее значение даты и вычитает его из наибольшего значения даты начала для каждого идентификатора (который является продолжительностью сеанса пользователя), а затем усредняет его.
Самый внешний запрос выполняется только для усреднения полученного времени. Есть ли способ оптимизировать этот запрос?
Вывод из EXPLAIN:
id select_type table type possible_keys key key_len ref rows extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 7
2 DERIVED table index NULL id 16 NULL 26 Using where
3 DEPENDENT SUBQUERY table index_subquery id,product_id,datelast id 12 func 2 Using index; Using where