mysql计数组按优化顺序排列

时间:2012-04-26 07:31:08

标签: mysql group-by sql-order-by

我有一个表格可以存储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

2 个答案:

答案 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

由于