Я делаю проект, в котором я отслеживаю пользователей на веб-сайте, я регистрирую их каждое попадание на сайте.Всякий раз, когда они нажимают на URL, я создам его в базе данных и помечу тегами.
Каждый URL называется «ресурсом» в моей базе данных, и ресурс может быть помечен несколькими тегами.Посетитель подключается к ресурсам, когда они посещают URL-адрес, и когда пользователь обращается к ресурсу, я также связываю с ним дату.
Я хочу найти ресурсы с правильными тегами, чтобынапример, в этом месяце или за сегодняшний день.
Запрос, который я сейчас строю, находится здесь:
SELECT r.resource_id, r.resource_url
FROM resource r
JOIN visitor_resource vt ON vt.resource_id = r.resource_id
JOIN resource_tags rt ON rt.resource_id = vt.resource_id
JOIN tags t ON t.tag_id = rt.tag_id AND t.tag_name = '42'
GROUP BY r.resource_id
Чтобы дать вам представление о структуре, которую вы можете увидеть здесь: отслеживание структуры базы данных http://kaspergrubbe.dk/db-overview.png
Таким образом, в основном мне придется подсчитать, сколько visitor_resources существует в данном месяце, просмотрев visitor_resources.last_visited за последний месяц, и получить 5 самых посещаемых ресурсов.
Как подойти к этому?
Вышеупомянутый запрос также кажется очень медленным без кеширования запросов, я подозреваю, что это потому, что t.tag_name не является индексом, и это varchar, но есть ли способ ускорить процесс, кроме добавления этогоindex?
Спасибо.