mysql distinct order by 性能问题

whnpneo 2008-12-31 07:51:00
select advlink,count(id) as clickcount,count(distinct ip) as ipcount,count(distinct cookievalue) as cookiecount from advlogs20081228 group by advlink;

advlogs20081228 这个表 80多万数据 执行需要 2分钟

大家看看有没有方法优化
...全文
369 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mschen 2009-03-05
  • 打赏
  • 举报
回复
group by 需要对表进行排序,可以在advlink字段上建立索引,这样advlink预先排好顺序这样会加快分组的速度.

create index idx_advlogs20081228_advlink on advlogs20081228(advlink);

在SQL SERVER上进行了测试,建立索引前后对比如下:


SQL Server 执行时间:
CPU 时间 = 32437 毫秒,耗费时间 = 32275 毫秒。



SQL Server 执行时间:
CPU 时间 = 9063 毫秒,耗费时间 = 4683 毫秒。


建立索引后所用的时间只是之前的1/8,尽管你使用的是mysql数据库,但是原理是一样的.
leef_zh 2009-03-04
  • 打赏
  • 举报
回复
改用group by 吧
count(distinct ip) 效率太低了!
我刚刚试了一下,一个61W行数据的表,单单算一列,要1分多钟
用group by几秒就出来了!
shenyinghe 2009-03-04
  • 打赏
  • 举报
回复
count(id),count(distinct ip),count(distinct cookievalue) 这三个应该都是相等的吧,有必要算3次么?

8,028

社区成员

发帖
与我相关
我的任务
社区描述
高性能数据库开发
社区管理员
  • 高性能数据库开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧