先看表结构吧.
ID nchar(10) Unchecked
ProciveName varchar(50) Unchecked
CityName varchar(50) Unchecked
Money money Unchecked
RecordTime datetime Checked
CalledNumber nchar(10) Checked
这是一个处理中间表,不能用临时表做,因为以后要跟踪统计.
每天运算一次将昨天的记录插入的这个表中,然后再以这个表为基础,进行计算.
这个话单表id没有和外面的表有联系,我感觉有些多余.另由于时间(recordtime)大部分是不相同的.而且每天也是按时期分开的.我想在这个时间列上建立聚焦索引,不知道合适不>
计算流程大概是,按天分开后,还要时段分.比如12点13点等.也要按callednumber(没有多少种,10种)分,再按省分...
请给我建议,怎么建立这个表的结构及索引.
类似我曾有过经历,当时根据要求是用了三张表进行统计,分别是 Month, Day, Hour。你这里牵扯到一个问题,你统计的时候,是纵向归纳(某固定ID的历史数据综合),还是横向归纳(某时间段的所有ID的数据综合)?
我当时的做法是,一个Console定时器程序,每天0点激活执行,将当天 Hour 中新增的数据统计到 Day 中,如果当天是当月的头一天,则然后将当月所有天的数据统计到 Month 表中,最后对 Hour、Day、Month 进行清理、空间释放(保留固定的月、日、时个数数据)。
需要注意一点,Month,Day,Hour 中的 RecordTime 字段都是 DateTime 类型,只是 Day 的时分为 00:00:00,Month的日为1,时分与 Day 一致。这样做就省得校对时间的表达正误了。而在统计时,也不妨碍比较过滤。
你现在的表就类似含有最原始数据的Hour,如果不附带 Day, Month作为辅助(以空间省时间,然后通过清理,又省空间),以后当你进行大范围统计的时候估计系统会很吃力。
首先要按天分,再按小时分,因此要对天和小时都建个索引比较快一点
在ORACLE中有函数索引可以使用,在SQL SERVER上可以用计算列来建立针对天和针对小时的索引
按天分开后,还要时段分.比如12点13点
为什么不用一个字段呢?譬如:2008-09-20 12:13,索引尽量建在重复数据少的字段上.