set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
--以下是查询二级下面的所有文章
ALTER proc [dbo].[Article_GetByTypeID]
(
@startindex int,
@pagesize int,
@TypeID int,
@ImgType int
)
as
begin
if(@ImgType=0)
select top(@pagesize) * from Article_View where ArticleType_ID=@TypeID or AT_ParID=@TypeID and A_ID NOT IN
(
select top(@pagesize*@startindex) A_ID from Article where ArticleType_ID=@TypeID or AT_ParID=@TypeID order by A_Order desc,A_InTime desc
) order by A_Order desc,A_InTime desc
else if(@ImgType=1)
select top(@pagesize) * from Article_View where (ArticleType_ID=@TypeID or AT_ParID=@TypeID) and A_Img='' and A_ID NOT IN
(
select top(@pagesize*@startindex) A_ID from Article where (ArticleType_ID=@TypeID or AT_ParID=@TypeID) and A_Img='' order by A_Order desc,A_InTime desc
) order by A_Order desc,A_InTime desc
else if(@ImgType=2)
select top(@pagesize) * from Article_View where (ArticleType_ID=@TypeID or AT_ParID=@TypeID) and A_Img<>'' and A_ID NOT IN
(
select top(@pagesize*@startindex) A_ID from Article where (ArticleType_ID=@TypeID or AT_ParID=@TypeID) and A_Img<>'' order by A_Order desc,A_InTime desc
) order by A_Order desc,A_InTime desc
end上面是我一个查询数据的存储过程,为毛我的页面读取的很慢很慢,我一页显示十条,每次页面加载的时候要停几秒才加载IE进度条,是SQL效率问题吗?
我用的是sql2005请问下请求开始IE没反应四五秒,然后才加载进行度条,是这个原因吗?
检查出IE没反应四五秒的真正原因,是连接数据库的问题,还是取数据的问题,还是你在pageload中有其他操作延迟了页面加载。或者页面上onload()事件里面有耗时的操作。加载大量的js也是导致页面空白。
但是整体来讲,我觉得还是row_number比较方便,而且在大多数情况下是优于双top的。SQL SERVER 2012出现了OFFSET/FETCH NEXT分页,比row_number要好很多。
OFFSET/FETCH NEXT分页,和row_number应该都是一样的吧
都像mysql很早就有的 limit n,m,就是对结果集增加一个序号列,再按此列选记录:m开始的前n行
效率上确实有提升,参考:
http://beyondrelational.com/modules/29/presentations/483/scripts/12983/sql-server-2012-server-side-paging-demo-using-offsetfetch-next.aspx?utm_source=brnewsletter&utm_medium=email&utm_campaign=2012Apr