新手问题 如何取出一个字段 (不重复数据的 TOP10)?

xufeng · 2012年06月17日 · 最后由 hooopo 回复于 2012年06月17日 · 3490 次阅读

有这样一个字段,里面有很多 URL 地址,这些 URL 地址很多都是一样的,我想知道这些 URL 不重复的 TOP 数据?

请问如何查询啊?

  1. 不重复的数据,进行叠加

  2. 得到的数据总数,进行 TOP 10 排序。

#1 楼 @fresh_fish 数据量非常大,大约 1000 万以上条数据。 楼上那个帖子没有数据叠加的问题!请求 DEMO

这么多数据,是不是要 map-reduce 了?

我会先用最简单的方法,遍历数组存到哈希。

如果 Ruby 实现的遍历和排序太慢,我就先插入 mongodb 再排序。

子查询吧

select * from (select count(*) as counter,url  from table group by url) c order by c.counter desc limit 10

不过这种东西设计的时候不做成 counter_cache,效率高不了啊

如果你要问就目前你说的这样的场景如何排序我想不出不需要进行 Filesort 的方法。

如果重新设计一下可以这样: 1.添加一个 url_count 字段,加索引。 2.插入之前先查询,如果存在就 url_count + 1。 3.select * from urls order by url_count desc limit 10

查询的时候: select id from urls where url="xx" and url_crc=CRC32("xx"); url_crc 列也要加索引。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号