Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询速度慢_Mysql - Fatal编程技术网

MySQL查询速度慢

MySQL查询速度慢,mysql,Mysql,我有一个应用程序,可以分析人们在facebook上喜欢的东西,并将它们与他们在过去几十年中可能喜欢的东西进行匹配 作为改进现有匹配的一部分,我将每个用户喜欢的facebook ID的散列存储起来,以保持匿名。人们可以多次输入,因此它会多次存储他们喜欢的内容,从而使结果有点偏差 因此,我的用户_likes表如下所示: id | page_id | user_id_hash ---------------------------------- | | SEL

我有一个应用程序,可以分析人们在facebook上喜欢的东西,并将它们与他们在过去几十年中可能喜欢的东西进行匹配

作为改进现有匹配的一部分,我将每个用户喜欢的facebook ID的散列存储起来,以保持匿名。人们可以多次输入,因此它会多次存储他们喜欢的内容,从而使结果有点偏差

因此,我的用户_likes表如下所示:

id  |  page_id   |  user_id_hash
----------------------------------
    |            |
SELECT page_id, COUNT(distinct user_id_hash)
from user_likes ul
GROUP BY page_id LIMIT 0,30;
我目前有大约82万张唱片

当前,如果我执行查询:

SELECT page_id, COUNT(*) from user_likes
GROUP BY page_id LIMIT 0,30
这大约需要8秒钟,并且给了我一个不正确的计数,因为它可以计算多次输入的人

我的问题是:

1如何加快查询速度?
2如何才能获得更准确的计数?

您可以通过以下语句来获得更准确的计数:

id  |  page_id   |  user_id_hash
----------------------------------
    |            |
SELECT page_id, COUNT(distinct user_id_hash)
from user_likes ul
GROUP BY page_id LIMIT 0,30;
在MySQL中加速是很棘手的,因为GroupBy。你可以试试下面的方法。在用户(如页面id、用户id)哈希上创建索引。然后试试这个:

select p.page_id,
       (select count(distinct user_id_hash)
        from user_likes ul
        where ul.page_id = p.page_id
       ) 
from (select distinct page_id
      from user_likes ul
     ) p

这个查询背后的想法是避免GROUPBY,这是MySQL中实现较差的操作符。内部查询应该使用索引来获取唯一页面ID的列表。select中的子查询应使用相同的索引进行计数。使用基于索引的操作,计数应该会更快。

尝试执行以下操作:ALTER TABLE user_likes ADD index page_id page_id-这将索引列page_id。我认为这会加快查询速度,对吗?我试着这么做,但得到了一个mysql错误:要想在1My bad行的“KEY page_id”附近使用正确的语法,请再试一次。我把语法弄错了。ALTER TABLE user_喜欢添加索引页_id页_id谢谢。我假设我可以按countdistinct user\u id\u hash DESC追加一个订单?而且,我想知道在什么阶段我会遇到记录数量的问题?才一天,我就有82万张唱片。。。这将运行两个月。@ahren。我不知道。如果您正在处理来自Facebook的数据,请确保您拥有支持它的硬件。