我有一个非常庞大的产品和用户数据集以及他们的使用时间。
大约有 1 亿行,占用大约 10 GB 的磁盘空间。
数据集按以下顺序排列:
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
此查询需要永远运行。
其次,我还想将用户 ID 11 4 和用户 ID 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
这个脚本也需要无限的时间。
请帮忙,
谢谢你