表中数据才12万条多点
以前是取出所有数据,在页面中分页的,可时常出现out of memory
现在改用存储过程分页,内存溢出问题已经解决了,没发生过,但却出现SQL超时:Microsoft OLE DB Provider for SQL Server error '80040e31 ' Timeout expired
查了资料,找了原因,,但还是没有解决。
情况是:前面的页面一切正常,只要浏览超过3000左右的页面时,就出现超时
在分析器里执行远程的那个存储过程的结果:
当前页 执行时间(分)
1 00:1
10 00:1
100 00:1
500 00:5
1000 00:8
1500 00:17
2000 00:25
3000 00:51
4000 01:25
5000 02:11
如果查询到最后一页,,好久都没结果出来(等了2分多钟没等下去,就取消了)
存储过程中主要就2条查询语句:
SELECT COUNT(1) FROM tb_actual WHERE ( DeletedFlag=0 and ActualType = 0 and TradeID=0 and keyword not like N '%yd% ' and ((isnull(Actualname,N ' ')+isnull(address,N ' ')+isnull(companyname,N ' ')+isnull(keyword,N ' ')) like N '%广州% ' ) )
SELECT Top 10 ID,ActualName,AgentCode,....... FROM tb_actual WHERE ID NOT IN (SELECT TOP 112180 ID FROM tb_actual WHERE ( DeletedFlag=0 and ActualType = 0 and TradeID=0 and keyword not like N '%yd% ' and ((isnull(Actualname,N ' ')+isnull(address,N ' ')+isnull(companyname,N ' ')+isnull(keyword,N ' ')) like N '%广州% ' ) ) Order By ID Desc) AND ( DeletedFlag=0 and ActualType = 0 and TradeID=0 and keyword not like N '%yd% ' and ((isnull(Actualname,N ' ')+isnull(address,N ' ')+isnull(companyname,N ' ')+isnull(keyword,N ' ')) like N '%广州% ' ) ) Order By ID Desc
我所想到的:
1、MSSQL属性中的 "连接 "选项卡 "查询超时设定 "为默认的600秒,我想已经够大了
2、表中自增ID,条件中的字段都建了索引。
存储过程主要就这些语句:
CREATE PROCEDURE [dbo].[sp_Wap_ActualSplitPage]
@tblName NVARCHAR(500)=N 'tb_actual ', --表,视图,查询语句
@fldNames NVARCHAR(1000)=N '* ', --要显示的字段列表
@PageSize INT=10, --每页显示的记录数
@curPage BIGINT=1 OUTPUT, --当前页
@TotalRecordNum BIGINT=0 OUTPUT, --总记录数
@fldOrder VARCHAR(255), --关键字段
@strWhere NVARCHAR(1000) = N ' ', --查询条件
@strOrder NVARCHAR(1000) = N ' ', --设置排序
.......
AS
set nocount on
declare @InsideWhere nvarchar(4000)
DECLARE @strSQL NVARCHAR(4000),@strTmpSQL NVARCHAR(2000),@intTmpRecordNum INT,@intTmpTotalPage INT
Select @strWhere=CASE ISNULL(@strWhere,N ' ') WHEN N ' ' THEN N ' 1=1 ' ELSE @strWhere END
Select @strOrder=CASE ISNULL(@strOrder,N ' ') WHEN N ' ' THEN N ' ' Else N ' Order By '[email protected] END
[email protected]