大数据量的处理(向SQL2005专家提问)
有三个表(我只列出数据处理有用到的字段)
表一:--每天在产生新数据之前都会把该表的数据移到表三([Net_Log)中后,删除该表所有数据(truncate table Net_User)
CREATE TABLE [dbo].[Net_User](
[AutoID] [bigint] IDENTITY(1,1) NOT NULL,
[UserID] [varchar](12) COLLATE Chinese_PRC_CI_AS NULL,
[IF1] [bigint] NULL,
[IF2] [bigint] NULL,
[MsgID] [bigint] NULL,
) ON [PRIMARY]
-----------------------------------------------------
表二:信息内容(每天都会增加记录)
CREATE TABLE [dbo].[Net_Msg](
[Msg] [varchar](2000) COLLATE Chinese_PRC_CI_AS NULL,
[IF1] [bigint] NULL,
[IF2] [bigint] NULL,
[MsgID] [bigint] NULL,
) ON [PRIMARY]
-----------------------------------------------------
表三:历史记录表
CREATE TABLE [dbo].[Net_Log](
[UserID] [varchar](12) COLLATE Chinese_PRC_CI_AS NULL,
[MsgID] [bigint] NULL,
) ON [PRIMARY]
业务逻辑:
表一的记录是:先有UserID,再与表二安条件匹配后才有MsgID(只有Net_User表中的UserID与MsgID同时不为空才是有效的一条记录)
每天表一(Net_User)的记录处理完成后都写到表三中(Net_Log)
代码如下:
步骤一
SELECT AutoID,
( SELECT top 1 MsgID
FROM Net_Msg AS m
WHERE IF1=u.IF1 AND IF2=u.IF2
and not exists ( select msgid from Net_MTLog where MsgID=m.MsgID and UserID=u.UserID )
) AS MsgID into #h10
FROM dbo.Net_User AS u
步骤二
通过dbo.Net_User与#h10匹配获得MsgID
表一每天都有20万左右的记录产品。
表三的记录目前有11491254记录。
前几天我试过在表三(Net_Log)改为UserID唯一的记录。多个MsgID(改为varchar(max)类型)用“,”(如:MsgID=',12,13,14,15,')分串在一起,处理速度也没有现有的快。
全文搜索好像不支持字段匹配(只支持到变量)。
XML我也试过了
<Root>
<row ID="6" />
<row ID="9" />
<row ID="10" />
.
.
.
<row ID="3315" />
<row ID="3316" />
<row ID="3317" />
<row ID="3447" />
<row ID="3448" />
<row ID="3449" />
<row ID="3450" />
<row ID="3451" />
<row ID="3452" />
<row ID="3462" />
<row ID="3463" />
<row ID="3464" />
<row ID="3465" />
<row ID="3466" />
</Root>
处理速度很慢
这样下去我怕不用多久到时处理会很慢。哪位高人可以帮我解决该问题
比如:用何种方式记录用户的历史记录。怎样提高匹配速度。
我是用SQL2005数据库。