У меня есть большая проблема с запросом, в котором мне нужно получить некоторые значения max и min, связанные с каждой строкой. Чтобы упростить, этот запрос соединяется с другой таблицей, но я покажу только запросы max и min.«использование временных» с максимальными и минимальными запросами в mysql
SELECT mv . * , mu . *
FROM (
SELECT Device_id, MAX(Last_time) AS last_visit,
MIN(Last_time) AS first_visit
FROM device_tracker
GROUP BY Device_id
)mv
JOIN (
SELECT Referral AS current_url,
Device_id, MAX(Last_time) AS last_url_visit, MIN(Last_time) AS first_url_visit
FROM device_tracker GROUP BY Device_id, current_url) mu
ON (mv.Device_id = mu.Device_id)
Если я ВЫПОЛНИТЬ объяснить, он говорит, что это «первый присоединиться» использует временный и FileSort, и это делает базу данных, чтобы свернуть в этой точке, используя почти 100% CPU на некоторое время.
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 7275
1 PRIMARY <derived3> ALL NULL NULL NULL NULL 15137 Using where
3 DERIVED device_tracker index NULL index_api 522 NULL 28392 Using index; Using temporary; Using filesort
2 DERIVED device_tracker range NULL index_api 257 NULL 7099 Using index for group-by
вопрос: есть ли способ заставить этот запрос использовать индекс, чтобы избежать временного и файловогоort? Заранее спасибо!!!
EDIT: Проблема теперь более сфокусирована. Если мы выполняем только второй подзапрос:
EXPLAIN SELECT Referral, Device_id, MAX(Last_time), MIN(Last_time)
FROM device_tracker
GROUP BY Device_id, Referral
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE device_tracker index NULL index_api 522 NULL 28412 Using index; Using temporary; Using filesort
и мы установили эти показатели:
NAME: TYPE: ROWS: FIELDS:
PRIMARY PRIMARY 28413 id
index_api INDEX 28413 Device_id, Last_Time, Referral
Можете ли вы разместить свои структуры таблиц? это может помочь увидеть индексы в частности. – Jaydee
@jaydee: Я разместил индексы и новую информацию. Проблема заключается в одном из подзапросов. –
Возможно, вам нужен один индекс для «Device_id, Referral» и один для «Device_id» – Timo