永发信息网

面试题:sql 2005分页查询语句

答案:4  悬赏:80  手机版
解决时间 2021-05-01 14:24

有一表(ProductInfo)有20万条记录,写出它的分页sql语句。表中有ID(int) 标识列,要求性能好,效率高!注:区限记录(beginrecord,endrecord)  每页20记录 当前页pageIndex

我写了两个:
1、select * from (select *,ROW_NUMBER() OVER(ORDER BY ID Asc) AS 'rownumber' from ProductInfo) T
where T.rownumber between  beginrecord and endrecord

2、select top(20) * from ProductInfo
where (id not in (select top(20*(pageIndex-1)) ID from ProductInfo order by ID))
order by ID Asc

面试官说这两个行还是可以,但效率低,耗性能,听他意思还有其他方法,望高手指点!

补充一个问题:
SQL SERVER中的表存到多少条记录时,速度明显变慢?

最佳答案

select top 5 * from user where uid not in (select top 5 *(2 -1)uid from user) (第二页,每页5条)


select top [pagesize] * from [table] where [uid] not in (select top [pagesize] *([pageno] -1)[uid from] [table])

全部回答

用他们表中的ID来查!

我有个才存储过程的写法

--************************************************** --ProductT --Create Procedure [dbo].[Pro_GetLanTabPage] -- ALTER Proc [dbo].[Pro_GetLanTabPage] (  @SqlWhere varchar(1000)=null,--添加参数,【语言】  @ParentTableName VARCHAr(50)=NULL,--添加参数,【表名】  @PrimaryField varchar(50),--主键字段名     @sortExpression varchar(100),--排序条件     @PageIndex int,     @PageSize int,     @TotalNum int output,     @TotalPage int output ) as begin     Declare @sqlCount nvarchar(4000)     Declare @sqlstr nvarchar(4000)  Declare @GetSql as nvarchar(4000)  set @sqlCount=N'select @TotalNum=count(*) '     set @sqlstr=N'select ROW_NUMBER() over(order by '+@sortExpression+') as rowId,tb.*,a.LanguageType,a.SiteName '  set @GetSql=N' from '+@ParentTableName+' as tb inner join AdvertisementNewsParaT as a on a.ParentID=tb.'+@PrimaryField     +' where ParentTableName='''+@ParentTableName+''''  if(@SqlWhere is not null)   set @GetSql=@GetSql+@SqlWhere     print @GetSql     set @sqlCount=@sqlCount+@GetSql      EXEC sp_executesql @sqlCount,N'@TotalNum int OUTPUT',@TotalNum OUTPUT

    Declare @StartRecord int     Declare @EndRecord int     select @TotalPage=CEILING((@TotalNum+0.0)/@PageSize)     if @PageIndex<=0     Set @pageIndex = 1     if @pageIndex>@TotalPage     Set @pageIndex = @TotalPage     set @StartRecord = (@pageIndex-1)*@PageSize + 1     set @EndRecord = @StartRecord + @PageSize - 1

    set @sqlstr='select * from ('+@sqlstr+@GetSql+') as tb where rowId between '+convert(varchar(9),@StartRecord)+' and '+convert(varchar(9),@EndRecord)         EXEC (@sqlStr)

end

给以关注,我也是经常那样写的,有最佳答案了告诉我!

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
谁会做下面十道语言学试题
港利通K668的有Java程序吗?这机型的手机QQ软
吉运商行怎么去啊,有知道地址的么
为什么我会被一些女的看得害羞呢?
节目看久了都会腻吗
夏天吃什么水果对身体最有益捏?
班主任寄语小学生,向先贤先烈鞠躬献花、抒写
怎么样爱,才不会吵架?
我怀孕五个多月了,来了少量的月经正常吗?
拍C T 有多大辐射
国药乐仁堂唐山医药有限公司华岩路店我想知道
马德钟唱得哪些歌好听?
吃什么能够改善发质?
现在买用了两年的挠地二手车行吗?用的住吗?
我想听张芸京的歌曲 大家推荐些 什么歌好听,
推荐资讯
请问我要查我QQ好友前几天的聊天记录要怎么查
增值税逾期申报一天,受到罚款,该怎么处理?
贫民剑士用什么组合最好
八字军训口号霸气押韵,个性军训口号九班紧急
欧莱雅的雪颜美白面膜效果怎么样啊 21岁可以
我嘴里老发甜怎么回事?
日语输入法下载
成都有没有到仪陇马鞍镇直达车?在哪个车站坐
面香缘地址在什么地方,想过去办事
如何教小学生英语
请问申请淘宝旺铺 要多少时间
如何免费获得9位数一下的QQ号,急求!
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?