关于大数据表的count(distinct)操作优化

yousite1 2012-10-12 10:34:33
有一个表
res_url
id time url 次数 流量 资源类型

每天产生一个URL一条记录 值分别是:时间\URL\访问次数\流量和\资源类型
一天的记录数大概是 50万条的数量级


不同天产生的URL有重复。


目的:查询范围为多天时要求出URL的记录数(如果能求出流量和及次数和更好)

简单说是select count(distinct url) from res_url
但这样查存在严重的性能瓶劲,主要是记录数过多了。distinct操作较慢,看看有没优化的方法。
...全文
1135 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yousite1 2012-10-25
  • 打赏
  • 举报
回复
继续顶上去,上面说错了数据量在5000千万左右才对。
yousite1 2012-10-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

假设ID唯一,URL、ID上建立索引
select * from tt a where not exists(select 1 from tt where a.url=url and a.id>id)
[/Quote]

用你的方法弄了,依然很慢呀,还有没其它特殊一点能较好改善这个问题的。
已知数据库表数据有9000多万条这样的数量级。
mash5_paul 2012-10-19
  • 打赏
  • 举报
回复
学习了,感谢楼上两位分享
yousite1 2012-10-12
  • 打赏
  • 举报
回复
我的表已经存在了,里面目前有100万条数了,再创建索引再测试好像没有效果,
如果URL索引和表一起创建再插入数据效率会提升很多,是不是这样,对已经存在表但未建URL索引的情况该如何解决才好?
WWWWA 2012-10-12
  • 打赏
  • 举报
回复
假设ID唯一,URL、ID上建立索引
select * from tt a where not exists(select 1 from tt where a.url=url and a.id>id)
ACMAIN_CHM 2012-10-12
  • 打赏
  • 举报
回复
你可以直接为已存在的表创建索引。

create index xxx on 有一个表(res_url)

2,209

社区成员

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

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