MySQL查询速度慢

时间:2013-09-10 02:33:46

标签: mysql

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

作为改进我们所拥有的比赛的一部分,我存储每个用户喜欢(使用他们的Facebook ID的哈希,以保持匿名)。人们可以多次输入,因此它会多次存储他们的喜欢,从而稍微扭曲结果。

所以我的user_likes表是这样的:

id  |  page_id   |  user_id_hash
----------------------------------
    |            |

我目前有大约820,000条记录。

目前,如果我进行查询:

SELECT page_id, COUNT(*) from user_likes
GROUP BY page_id LIMIT 0,30

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

我的问题是:

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

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式填写查询来获得更准确的计数:

SELECT page_id, COUNT(distinct user_id_hash)
from user_likes ul
GROUP BY page_id LIMIT 0,30;

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

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中的子查询应该使用相同的计数索引。使用基于索引的操作,计数应该更快。