先说下我的SQL数据库文件大概有900万条数据,约3.5G大小,全部在一个表中,以下是我的建表SQL脚本,其中在[XH]中个字段建立了聚集索引。
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ic]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[ic]
GOCREATE TABLE [dbo].[ic] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[XH] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[PP] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[PH] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[FZ] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[SL] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[BZ] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[USERID] [int] NULL ,
[CNAME] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[ADRESS] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[TEL] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[XZ] [int] NULL ,
[RA] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[ISP] [int] NULL ,
[AID] [int] NULL ,
[KU] [int] NULL ,
[JJ] [int] NULL ,
[isp2] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO CREATE  CLUSTERED  INDEX [IX_ic] ON [dbo].[ic]([XH]) ON [PRIMARY]
GO我的ASP查询代码是:sql="select top  "&page_size*page&" xh,pp,ph,fz,sl,bz,cname,adress,tel, isp,xz,ku,jj,userid,isp2 from ic where xh like '"&ICxh&"%'  order by isp desc,xz desc,userid asc,jj asc" 
在执行ASP查询的时候有的时候很快 ,但有的时候很慢,而且SQL占用的内存很快上升,最后ASP页面出现查询超时错误。
为什么有的时候能很快查出来,有的时候会出现SQL占用很大内存,而且不能释放呢?甚至导致死机。望各位高人指点。感激不尽!!

解决方案 »

  1.   

    1、分页,如果检索出的数据很多,建议使用一个存储过程分页
    2、分表,如果可以,把这个表分为几个,sqlserver一个表超过200万,效率就很低了
    3、提高sqlserver对内存和cpu的使用
      

  2.   

    感谢楼上的解答,但问题是为什么有的时候能很快查出,而且如果数据库中没有要查询的内容也能很快显示出来,但有的时候就是半天没反应,而且SQL占用内存飚升呢??是不是我的索引有什么问题?