当前位置: 代码迷 >> 其他数据库 >> 关于大数据表的count(distinct)操作优化,该怎么解决
  详细解决方案

关于大数据表的count(distinct)操作优化,该怎么解决

热度:5901   发布时间:2013-02-26 00:00:00.0
关于大数据表的count(distinct)操作优化
有一个表
res_url
id time url 次数 流量 资源类型

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


不同天产生的URL有重复。


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

简单说是select count(distinct url) from res_url
但这样查存在严重的性能瓶劲,主要是记录数过多了。distinct操作较慢,看看有没优化的方法。
------最佳解决方案--------------------------------------------------------
假设ID唯一,URL、ID上建立索引
select * from tt a where not exists(select 1 from tt where a.url=url and a.id>id)
------其他解决方案--------------------------------------------------------
我的表已经存在了,里面目前有100万条数了,再创建索引再测试好像没有效果,
如果URL索引和表一起创建再插入数据效率会提升很多,是不是这样,对已经存在表但未建URL索引的情况该如何解决才好?
------其他解决方案--------------------------------------------------------
你可以直接为已存在的表创建索引。

create index xxx on 有一个表(res_url)
------其他解决方案--------------------------------------------------------
学习了,感谢楼上两位分享
------其他解决方案--------------------------------------------------------
引用:
假设ID唯一,URL、ID上建立索引
select * from tt a where not exists(select 1 from tt where a.url=url and a.id>id)


用你的方法弄了,依然很慢呀,还有没其它特殊一点能较好改善这个问题的。
已知数据库表数据有9000多万条这样的数量级。

------其他解决方案--------------------------------------------------------
继续顶上去,上面说错了数据量在5000千万左右才对。
  相关解决方案