+ -
当前位置:首页 → 问答吧 →  SQL Server 2005 某个表中,其中一列存储的值比较多, 第一次查询很慢,怎么解决?

SQL Server 2005 某个表中,其中一列存储的值比较多, 第一次查询很慢,怎么解决?

时间:2011-12-23

来源:互联网

数据库版本: SQL Server 2005
表结构:  
CREATE TABLE [dbo].[OGAInfo]
(
[OGA_ID] [varchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL, --主键
[Tem_Detail] [varchar] (max) COLLATE Chinese_PRC_CI_AS NOT NULL,
[NodesAttrib] [varchar] (max) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
  其中,基于程序设计的原因(ASP.net C# +SQL Server 2005),Tem_Detail 列字段存储的值很大,存储的为json结构的字符信息,40KB以上,行记录大概为8000条。
  在程序的一个页面中,打开的时候,要执行一个查询的存储过程,这个存储过程的其中一条查询语句为:
  SELECT Tem_Detail
  FROM OGAInfo
  WHERE OGA_ID = '9117a14fc56546e1bcf104b55efa67a7'
  AND Tem_Detail != ''
  这个查询语句,第一次执行的时候,非常慢,要等4-5分钟,由于响应时间太久,导致程序直接报错,错误信息为:System.IndexOutOfRangeException: Cannot find table 0。把报错的页面关闭掉,再次打开这个查询页面,可以打开,但要等待30秒左右,之后打开就在10秒左右。但是,如果等待1个小时以后,再次打开这个查询页面,又会显得非常慢。
  如果,重新启动数据库服务,打开这个页面的时候,跟第一次打开一样,会导致程序直接报错。

  由于项目原因,无法快速修改Tem_Detail存储的值,请问如何提高第一次查询的速度?怎么去优化数据库,提高效率?

作者: wenhui118   发布时间: 2011-12-23

1.可以考虑对Tem_Detail建立索引.
2.如果是Tem_Detail != '',可以考虑使用len(Tem_Detail) = 0

作者: dawugui   发布时间: 2011-12-23

Tem_Detail建立索引看下能不能快点。

作者: szstephenzhou   发布时间: 2011-12-23

OGA_ID 建立聚集索引 Tem_Detail 建立非聚集索引。

作者: fredrickhu   发布时间: 2011-12-23