Сделать дату проверки sargable :
DATE_ADD(v.created, INTERVAL %d DAY) > NOW()
->
v.created > NOW - INTERVAL %d DAY
Является ли product_view
a VIEW
? Или TABLE
? Если таблица , укажите два «покрывающих» индекса:
INDEX(created, session, product) -- (for v)
INDEX(session, created, product) -- (for v2)
Возможно, все полученные вами значения равны даже ? Эту ошибку можно исправить примерно тремя способами, каждый удвоит скорость. Я думаю, что оптимальным является изменение одной строки в ON
на
DATE_ADD(v2.created, INTERVAL %d DAY) > NOW()
->
v2.created > v.created
Я думаю, что это удвоит скорость .
Однако количество может быть не совсем правильным, если у вас может быть два разных продукта с одинаковым created
.
Еще одна проблема : вы получите
prod assoc CT
123 234 43
234 123 76 -- same pair, opposite order
Мой пересмотренный тест говорит, что 234 предшествовал 123 чаще, чем другой путь.
Попробуйте эти вещи. Но если вам все еще нужно больше; У меня есть другая, более агрессивная мысль.