首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

分享:查询优化案例一解决办法

2012-04-06 
分享:查询优化案例一场景:统计独立用户数,一个不同的UserKey算一个用户数据表:VisitLog110101,行数3000万

分享:查询优化案例一
场景:统计独立用户数,一个不同的UserKey算一个用户
数据表:VisitLog110101,行数3000万左右
字段:
ID int 主键
URL varchar(500)
UserKey varchar(36) --类似GUID字符串 --有索引
VisitDate Datetime

方案一:

SQL code
select Count(Distinct UserKey) FROM VisitLog110101耗时近4分


方案二:
SQL code
SELECT count(distinct HashBytes ('md5',upper(UserKey))) FROM VisitLog110101


耗时近30秒
个人理解:看执行计划,好像是HashBytes 优化了hashmatch

方案三:
SQL code
select UV=Count(UV)from (select UV=1FROM VisitLog110101group by UserKey) a

耗时30秒
个人理解,去掉了distinct 就省掉了排序的消耗了。

个人理解不知道对不对,欢迎大家继续讨论





[解决办法]
distinct 的效率是不会高的
[解决办法]
弱弱问一句,为什么楼主的方案二、方案三都快那么多,没弄明白。
[解决办法]
奇怪,为什么不试试:
SQL code
select count(*)FROM VisitLog110101group by UserKey
[解决办法]
唉,都没涉及到那么多数据的查询
[解决办法]
如果UserKey上有索引,

直接count(*)应该很快.
[解决办法]
SQL code
select count(*) from (select distinct UserKey FROM VisitLog110101) a
[解决办法]
UserKey字段是否真的唯一, 即没有重复值的?

如果是, 可以把索引修改为唯一索引(unique index),

这样distinct就很快了.

热点排行