counter
counter

热词记录表(存储过程作业计划)

1.由于原表的记录数过多,从中查询数据虽然可以通过建立分区和索引,但原表要进行经常性插入数据,所以,现在要从原表定时读取符合条件的数据到新记录表中,用的时候直接从新记录表中读取数据,加快查询速度。

2.通过两个角度来进行定时读取,一是每一个月的月末晚上十一点五十九,读取这一个月的数据,二是每一个周的周日晚上十一点五十九,读取该周的数据。

3.主要是通过作业计划,然后配合存储过程完成。

4.第一个角度(存储过程):

 CREATE  PROCEDURE  存储过程名
AS
BEGIN
SET NOCOUNT ON;

INSERT INTO  新表(
ProcessedInput,
InputSpelling,
CityId,
CityName,
[Year],
[Month],
ProcessedInputClicks)
SELECT TOP 100
tc.ProcessedInput,
tc.InputSpelling,
tc.CityId,
tc.CityName,
tc.[Year],
tc.[Month],
COUNT(tc.ProcessedInput) AS Clicks
FROM 原表 AS tc
WHERE [month]=month(getdate()) and [year]=year(getdate())
GROUP BY tc.ProcessedInput,tc.InputSpelling,tc.[year],tc.[month],tc.CityId,tc.CityName
ORDER BY Clicks DESC

END

 第二个角度(存储过程):

CREATE  PROCEDURE  存储过程名
AS
BEGIN

INSERT INTO 新表(
ProcessedInput,
InputSpelling,
CityId,
CityName,
[Year],
[Month],
[Week],
ProcessedInputClicks)
SELECT TOP 100
tc.ProcessedInput,
tc.InputSpelling,
tc.CityId,
tc.CityName,
tc.[Year],
tc.[Month],
DATEPART(ww,getdate())-1,
COUNT(tc.ProcessedInput) AS Clicks
FROM 原表 AS tc
WHERE datediff(week,tc.[Time],getdate())=1
GROUP BY tc.ProcessedInput,tc.InputSpelling,tc.[year],tc.[month],tc.CityId,tc.CityName
ORDER BY Clicks DESC

END

注:[Time]为原表字段,精确到秒的时间。

    DATEPART(ww,getdate())-1为获取当前年度的第几周的前一周,返回int。

datediff(week,tc.[Time],getdate())=1 表示表中[Time]字段与当前年度周数相差一周。

posted @ 2012-05-08 17:27  bfy  阅读(251)  评论(0编辑  收藏  举报