Проблема с очень медленным запросом MySQL с использованием левых соединений.
SELECT ip,T1.ipaddr,host,referrer,agent,page,url,thedate,DV,PV,notes
FROM visits_temp AS T1
LEFT JOIN (
SELECT ipaddr,COUNT(DISTINCT LEFT(thedate,10)) AS DV
FROM visits GROUP BY ipaddr
) AS T2 ON T1.ipaddr = T2.ipaddr
LEFT JOIN (
SELECT ipaddr,notes
FROM topvisitилиs
) As T3 ON T3.ipaddr = T1.ipaddr
LEFT JOIN (
SELECT ipaddr,COUNT(ip) AS PV
FROM visits
GROUP BY ipaddr
) AS T4 ON T4.ipaddr = T1.ipaddr
WHERE referrer = '' AND
thedate BETWEEN '2013-01-07 00:00:00' AND '2013-01-09 23:59:59'
GROUP BY T1.ip
илиDER BY thedate desc
Цель здесь состоит в том, чтобы получить прямой трафик посетителей для веб-сайта, чем LEFT JOINS, чтобы найти общее количество дней посещения (DV) и общее количество просмотренных страниц (PV). Таблица посещений содержит около 2,9 м записей в настоящее время, а поле ipaddr и thedate ARE индексировано. Этот запрос займет около 90 секунд.
SELECT ipaddr,COUNT(DISTINCT LEFT(thedate,10)) AS DV FROM visits GROUP BY ipaddr
или
SELECT ipaddr,COUNT(ip) AS PV FROM visits GROUP BY ipaddr
Отдельные команды выбора в LEFT JOINS, когда они запускаются сами по себе, завершатся через 0,03 секунды. Возможно, LEFT JOIN - это не тот подходящий способ, чтобы пойти в этой ситуации, я был бы готов к альтернативам.