数据库版本: 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存储的值,请问如何提高第一次查询的速度?怎么去优化数据库,提高效率?
表结构:
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存储的值,请问如何提高第一次查询的速度?怎么去优化数据库,提高效率?
2.如果是Tem_Detail != '',可以考虑使用len(Tem_Detail) = 0
1.第一次查询很慢
lz可以考虑这样做,建一个数据库作业或者写一个定时程序,每半个小时(具体时间lz自己设,只要小于你的1个小时就行)执行一次,目的主要是把这个表的数据缓冲到数据库服务器上。这样,每次程序调用的时候,就不用每次都那么费劲了
2.优化这条SQL
lz需要把where条件后的字段都加上索引