日期:2014-05-17  浏览次数:20607 次

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 会不会降低效率?什么方式比较好?

最关键的问题,我做的这个工具是统计用户留存率和活跃度的,有一些数据需要累积统计,比如累积用户数量,和日活跃度,是不是做个历史表比较好?需要一些累积数据的话就直接在历史表里面读?

数据库小白,真心求解.

SQLSERVER 优化 索引 历史表 数据表设计

------解决方案--------------------
有人说DISTINCT比GROUP BY效率,还有BETWEEN 比 >=, <=效率
这些即使有差异,也不会很大。具体要看业务需求。

引入@参数则不使用索引搜索而搜索全表?
如果没有类型转换,一般不会这样

还有我想要两个数据集的交集,用ineer join 会不会降低效率?什么方式比较好?
用什么join主要还是看业务,inner join 一般返回最少的数据量,通常高效。

最关键的问题,我做的这个工具是统计用户留存率和活跃度的,有一些数据需要累积统计,比如累积用户数量,和日活跃度,是不是做个历史表比较好?需要一些累积数据的话就直接在历史表里面读?
可以这样做