我有一个表格可以存储tag name
posts
table: tagname
tags | pid
festival | 10034
New York Fashion Week | 10034
festival | 10035
car | 10036
...
该表现已有590,000条记录。现在我想从这张表中获得前10个最受欢迎的标签。
SELECT tags, COUNT(*) as Num FROM tagname
GROUP BY tags
ORDER BY Num DESC
这将花费23.88秒。返回358 kinds of tags
tags | Num
festival | 7201
art | 6988
gift | 6755
...
如何优化此查询,即使在my.cnf
中也是如此?我试图为标签添加索引,似乎没有效果。
编辑:
EXPLAIN SELECT tags, COUNT(tags) as Num FROM
{标记名{1}}
GROUP BY tags order by Num DESC
答案 0 :(得分:2)
在tags
列中添加索引:
ALTER TABLE `tagname`
ADD INDEX `tags_index` (`tags` ASC) ;
尝试创建第二个索引
CREATE INDEX tags_pid_index ON tagname (tags, pid);
然后将您的查询修改为:
SELECT tags, COUNT(pid) as Num
FROM tagname
GROUP BY tags
ORDER BY Num DESC
答案 1 :(得分:1)
你试过这样的事吗:
SELECT tags, COUNT(*) as Num FROM tagname
GROUP BY tags HAVING COUNT(*) > 1
ORDER BY Num DESC LIMIT 10
技巧可以是:如果您知道最低人气数量,您可以更改COUNT(*)>中的数字。 X
由于