首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有索引的10 to数据库大小的Mysql查询仍将减慢1亿条记录

带有索引的10 to数据库大小的Mysql查询仍将减慢1亿条记录
EN

Stack Overflow用户
提问于 2019-01-20 22:50:45
回答 1查看 435关注 0票数 0

我有一个相当庞大的数据集,里面有产品和用户以及他们的使用时间。

大约有1亿行,占用了大约10 GB的磁盘空间。

数据集按以下顺序排列:

代码语言:javascript
运行
复制
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.....

我也加了这样的索引,

代码语言:javascript
运行
复制
ALTER TABLE purchase_data ADD INDEX (userid);
ALTER TABLE purchase_data ADD INDEX (itemid);
ALTER TABLE purchase_data ADD INDEX (purchase_date);

假设我想要找到所有购买了某个产品( item 1)的用户,然后找到他购买的所有其他项目。

代码语言:javascript
运行
复制
Select itemid from purchase_data
    where userid in (Select userid, from purchase_data
                    where itemid=1)
      and itemid!=1

此查询需要花费大量时间来运行。

其次,我还想将这些用户之间的所有公共项相加,比如userid11,4和userid12也带来了4,所以我想加上计数为2的4

为此,我编写了一个类似的查询:

代码语言:javascript
运行
复制
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

这个脚本也需要无限的时间。

请帮帮我

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-01-20 22:54:45

您应该使用内部联接而不是IN子句,例如:

代码语言:javascript
运行
复制
Select itemid 
from purchase_data  a 
INNER JOIN  (
    Select userid
     from purchase_data where itemid=1
    ) T on t.userid = a,userid 
  where a.itemid != 1 

IN子句用作多个OR条件,而inner join用作单个关系。

您应该删除这些索引,并创建一个复合索引,将连接条件中涉及的列放在左边,将others列放在右边,而不是只有一个列

代码语言:javascript
运行
复制
create index my_idx on  purchase_data(userid, itemid );

分组查询也是如此

代码语言:javascript
运行
复制
Select itemid , count(*)
from purchase_data  a 
INNER JOIN  (
    Select userid
     from purchase_data where itemid=1
    ) T on t.userid = a,userid 
  where itemid != 1 
group by itemid 
having count(itemid)>=1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54277633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档