首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询慢

MySQL查询慢
EN

Stack Overflow用户
提问于 2013-09-10 02:33:45
回答 1查看 73关注 0票数 0

我有一款应用程序,可以分析人们facebook的喜好,并将他们与过去几十年中可能喜欢的东西相匹配。

作为改进匹配的一部分,我存储每个用户的喜好(带有他们的facebook ID的散列,以保持匿名)。人们可以多次输入,所以它存储了他们的喜好多次,从而扭曲了结果。

所以我的user_likes表是这样的:

代码语言:javascript
复制
id  |  page_id   |  user_id_hash
----------------------------------
    |            |

我现在有大约82万张唱片。

目前,如果我执行一个查询:

代码语言:javascript
复制
SELECT page_id, COUNT(*) from user_likes
GROUP BY page_id LIMIT 0,30

这大约需要8秒,并给我一个不正确的计数,因为它可以计数的人,谁多次进入不止一次。

我的问题是:

1)如何加快查询速度?

2)我怎样才能得到更准确的数字?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-10 02:38:07

通过这样的措辞查询,您可以得到更精确的计数:

代码语言:javascript
复制
SELECT page_id, COUNT(distinct user_id_hash)
from user_likes ul
GROUP BY page_id LIMIT 0,30;

在MySQL中加快速度是很棘手的,因为group by。您可以尝试以下方法。在user_likes(page_id, user_id_hash)上创建索引。然后试试这个:

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

这个查询背后的想法是避免group by --一个在MySQL中实现不好的操作符。内部查询应该使用索引来获取唯一page_id的列表。select中的子查询应该使用相同的索引进行计数。对于基于索引的操作,计数应该更快。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18709887

复制
相关文章

相似问题

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