Select * From AdData_Clicks_log where statTIme>='2008-11-14 00:00:00' and StatTime<='2008-11-14 23:59:59' 这是我的查询语句,以下是表结构和索引.if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[AdData_Clicks_log]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[AdData_Clicks_log]
GOCREATE TABLE [dbo].[AdData_Clicks_log] (
[ID] [int] NOT NULL ,
[IP] [varchar] (15) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[MovementID] [smallint] NOT NULL ,
[StatTime] [datetime] NOT NULL ,
[PutUrl_all] [varchar] (150) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[PutUrl_File] [varchar] (150) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[UserID] [smallint] NOT NULL ,
[Agent] [varchar] (300) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[BrowserXY] [varchar] (300) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[PutUrl_Referrer] [varchar] (500) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[PlayLayer] [tinyint] NOT NULL ,
[isClick] [bit] NOT NULL ,
[s1] [bit] NOT NULL ,
[s2] [bit] NOT NULL ,
[s3] [bit] NOT NULL ,
[sStated] [tinyint] NOT NULL ,
[uStated] [tinyint] NOT NULL 
) ON [PRIMARY]
GO CREATE  CLUSTERED  INDEX [PK_AdData_Clicks_log] ON [dbo].[AdData_Clicks_log]([ID]) ON [PRIMARY]
GOALTER TABLE [dbo].[AdData_Clicks_log] WITH NOCHECK ADD 
CONSTRAINT [DF_AdData_Clicks_log_PutUrl_all] DEFAULT ('') FOR [PutUrl_all],
CONSTRAINT [DF_AdData_Clicks_log_Agent] DEFAULT ('') FOR [Agent],
CONSTRAINT [DF_AdData_Clicks_log_BrowserXY] DEFAULT ('') FOR [BrowserXY],
CONSTRAINT [DF_AdData_Clicks_log_PutUrl_Referrer] DEFAULT ('') FOR [PutUrl_Referrer],
CONSTRAINT [DF_AdData_Clicks_log_PlayLayer] DEFAULT (1) FOR [PlayLayer],
CONSTRAINT [DF_AdData_Clicks_log_sStated] DEFAULT (0) FOR [sStated],
CONSTRAINT [DF_AdData_Clicks_log_uStated] DEFAULT (0) FOR [uStated]
GO CREATE  INDEX [PK_AdData_Clicks_log_StatTime] ON [dbo].[AdData_Clicks_log]([StatTime]) WITH  FILLFACTOR = 90 ON [PRIMARY]
GO CREATE  INDEX [AdData_Clicks_log_2] ON [dbo].[AdData_Clicks_log]([IP], [MovementID], [StatTime]) WITH  FILLFACTOR = 90 ON [PRIMARY]
GO CREATE  INDEX [AdData_Clicks_log_3] ON [dbo].[AdData_Clicks_log]([MovementID], [StatTime], [sStated]) WITH  FILLFACTOR = 90 ON [PRIMARY]
GO因为这个表目前正以100万/天的速度增长..怕!!!周二开始每天增加300万,也就是四百万.但这是公司的命根子,预期是每天1000万,可是现在,这个表才600万条数据,查询一次要40秒时间....
有经验的前辈帮帮忙...SQL Server 2000

解决方案 »

  1.   

    你查一下$
    SELECT COUNT(1)
    FROM AdData_Clicks_log 
    WHERE statTIme>='2008-11-14 00:00:00' and StatTime <='2008-11-14 23:59:59' 看看需要的时间是多久。
      

  2.   


    SELECT COUNT(*)
    FROM AdData_Clicks_log 
    WHERE statTIme>='2008-11-14 00:00:00' and StatTime <='2008-11-14 23:59:59' 这样查也是1秒不到.查询结果113万
      

  3.   


    我们的系统是一个弹窗广告管理系统,就是提供给别的个人网站他们为我们弹出广告,按1000IP计费.一天之内同一个IP只计费一次,也只存一条记录.而且目前还是业务量小的,预计未来的一个月后每天的量就会上一千万了.但是我之前在GOOGLE搜索过.也有人的表有3000万条记录或是上亿的,他查询说不到一秒...我就纳闷了...怎么回事呢.是否可以做其他的优化?或是对服务器进行调整.分区表我不会哦,我也不知道,以我上面的表来说,应该按哪个列来分区更合理,我试过做分区表和可更新的分区视图,结果失败了....没做成.目前我是分了两张表,一张表是存当天数据的,一张表是历今天以前的数据的.上面说的_LOG的表就是存历史数据的,当天数据的表因为只有一百来万条,因此查询没有问题,历史表的数据只保存七天就足够了,七天前的可以清除,我做了SQL代理作业自动每半小时清除七天前的旧数据,可是我目前担心的是,现在只有六百万条,就慢成这样,如果以后一天500万条,半个月内估计就会到这个数了以目前的发展趋势来说.那时候怎么办呢就算查当天的数据也会很慢,然后,查历史数据变成500万*7=3500万...那就更不可能了...麻烦前辈指点..感激不尽.
      

  4.   


    我在数据库里,使用那个号称千级万的SQL SERVER 分页存储过程来返回数据的,实际返回到应用程序的数据,也就是每页100条.
      

  5.   


    而上面所说的查询结果,是通过SQL查询分析器来查询的.其实我想表的列数不多.应该不至于会有这么多的数据的,所以,就这么几百万条,应该不会导致这么慢才是啊.人家上亿的SQL SERVER表怎么整啊?
      

  6.   

    Select * From AdData_Clicks_log where statTIme>='2008-11-14 00:00:00' and StatTime <='2008-11-14 23:59:59' 觉得返回的数据列可能太多了。
    返回数据到客户端至少需要数据库提取数据、网络传输数据、客户端接收数据以及客户端处理数据等环节,如果返回不需要的数据,就会增加服务器、网络和客户端的无效劳动,其害处是显而易见的,避免这类事件需要注意:A、横向来看,不要写SELECT *的语句,而是选择你需要的字段。B、 纵向来看,合理写WHERE子句,不要写没有WHERE的SQL语句。C、 注意SELECT INTO后的WHERE子句,因为SELECT INTO把数据插入到临时表,这个过程会锁定一些系统表,如果这个WHERE子句返回的数据过多或者速度太慢,会造成系统表长期锁定,诸塞其他进程。D、对于聚合查询,可以用HAVING子句进一步限定返回的行。
      

  7.   


    谢谢,A这个基本上,所有列,只有两列是我不需要的,因此,这个作用可能不大哦.就是改进不明显.B:这个写了WHERE条件了,并且只有STATTIME一个字DUAN做为条件.C:谢谢你提醒,我每天转移数据的时候确实是这样做了,这样会导致系统会有几分钟的时候被停住,外面完全没法做业务了.这个我先解决好查询的问题再来处理转移数据的问题.D:不懂...
      

  8.   

    分区表我也考虑过了,可是,听说SQL 2000做分区别的意义不大,我之前也试过,在本地建两小表,试着做个可更新的视图.结果失败了.比较复杂吧.然后,实际上我想分布式分区视图远远比本地的分区表更能解决问题.但是我不会,也能难找到完整的我能理解的相关资料.难道不用分区表就无法解决吗/毕竟数据量很小啊,只有1000万不到,我预期是最少能快速处理5000万条数据!