У меня есть две таблицы. Один из них - это журнал кликов, который записывает точное время, которое мы получили. Второй - это таблица за доллар/день, в которой записывается сумма, которую мы заработали каждый день с определенного сайта.speed up mysql query
Мне нужно рассчитать ежедневную цену за клик для каждого сайта. Запрос ниже работает, но занимает почти минуту.
Вот результат объяснить:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE click_log ALL url_id,click_time NULL NULL NULL 1404209 Using where; Using temporary; Using filesort
1 SIMPLE daily_dollars ref url_id,date date 3 func 6 Using where
И запрос:
SELECT date(click_log.click_time) AS DAY,
click_log.shorturl AS site,
daily_dollars.money AS earned,
count(click_log.click_id) AS clicks,
daily_dollars.money/count(click_log.click_id) AS CPC
FROM `yourls_log` AS click_log, yourls_url_money AS daily_dollars
WHERE click_log.click_time >= "2011-07-01"
AND click_log.url_id = daily_dollars.url_id
AND date(click_log.click_time) = daily_dollars.date
GROUP BY DAY , click_log.shorturl
Все, что я могу сделать, чтобы ускорить этот процесс?
Структура таблицы:
yourls_log
----------
click_id
click_time
shorturl
url_id
yourls_url_money
----------------
id
url_id
date
money
Не могли бы вы опубликовать структуру таблицы? –
Я не достаточно хорош в MySQL, чтобы предлагать советы о том, как ускорить ваш запрос, но то, что я делаю, рекомендую вам [использовать явный метод 'JOIN'] (http://mysqljoin.com/). – Bojangles
Это GROUP BY замедляет запрос, потому что он не может использовать индекс. Если нет конкретных причин для этого, попробуйте удалить GROUP BY. Кстати, из вашего запроса 'DAY' ссылается на' click_log'.'click_time', и поскольку время может сильно различаться между записями, я не вижу причин для группировки на 'DAY', нет? – Abhay