У меня довольно большой набор данных о продуктах и пользователях и времени их использования.
Имеется около 100 миллионов строк и занимает около 10 ГБ дискового пространства.
набор данных находится в следующем порядке:
userid itemid purchase_date
1 1 2018-12-22
11 1 2018-12-22
11 4 2018-12-22
12 4 2018-12-22
11 5 2018-12-22
.......100M+ rows.....
Я тоже добавил такой индекс,
ALTER TABLE purchase_data ADD INDEX (userid);
ALTER TABLE purchase_data ADD INDEX (itemid);
ALTER TABLE purchase_data ADD INDEX (purchase_date);
Допустим, я хочу найти всех пользователей, которые приобрели товар (пункт 1), а затем найти все остальные предметы, которые он приобрел.
Select itemid from purchase_data
where userid in (Select userid, from purchase_data
where itemid=1)
and itemid!=1
этот запрос выполняется вечно.
Во-вторых, я также хочу добавить все общие элементы между этими пользователями, такие как userid 11 4, а userid 12 также принес 4, поэтому я хочу добавить 4 со счетом 2
Я написал для этого похожий запрос:
Select itemid,count(*) from purchase_data
where userid in (Select userid, from purchase_data
where itemid=1)
and itemid!=1
group by itemid
having count(itemid)>=1
Этот сценарий также занимает бесконечное время.
Пожалуйста, помогите,
Спасибо