SqlServer2000查询数据表的优化问题
本帖最后由 fyssqzh555 于 2013-11-22 11:16:10 编辑
表的格式: 登陆日期 登陆ID ... 渠道类型
聚集索引我设置的是登陆日期,然后渠道类型是普通索引,现在我要查询在一段日期内的数据,并去重复
在网上看了看之后写的Sql语句:
SELECT DISTINCT 登陆ID FROM 用户登录表 WHERE 登陆日期 BETWEEN @DATE_START AND @DATE_END AND 渠道类型 = @渠道类型 (为了易读,用中文代替字段了,233)
有人说DISTINCT比GROUP BY效率,还有BETWEEN 比 >=, <=效率
这些到底对不对?还有人说如果在Sql语句中引入@参数则不使用索引搜索而搜索全表?
还有我想要两个数据集的交集,用ineer join 会不会降低效率?什么方式比较好?
最关键的问题,我做的这个工具是统计用户留存率和活跃度的,有一些数据需要累积统计,比如累积用户数量,和日活跃度,是不是做个历史表比较好?需要一些累积数据的话就直接在历史表里面读?
数据库小白,真心求解.
------解决方案--------------------有人说DISTINCT比GROUP BY效率,还有BETWEEN 比 >=, <=效率
这些即使有差异,也不会很大。具体要看业务需求。
引入@参数则不使用索引搜索而搜索全表?
如果没有类型转换,一般不会这样
还有我想要两个数据集的交集,用ineer join 会不会降低效率?什么方式比较好?
用什么join主要还是看业务,inner join 一般返回最少的数据量,通常高效。
最关键的问题,我做的这个工具是统计用户留存率和活跃度的,有一些数据需要累积统计,比如累积用户数量,和日活跃度,是不是做个历史表比较好?需要一些累积数据的话就直接在历史表里面读?
可以这样做