我是一个新手C#程序员,这是我做分页的SQLServer代码,求大神帮忙改进,提高查询效率:代码见问题补充

selecttop5*from表Awhere1=1and查询条件1and查询条件2andIDnotin(selecttop5nidfrom表Awhere1=1and查询条... select top 5 * from 表A where 1=1 and 查询条件1 and 查询条件2 and ID not in (select top 5 nid from 表A where 1=1 and 查询条件1 and 查询条件2 排序) 排序
这是我分页最终生成的SQL代码,效率很低,求大侠改进
展开
 我来答
Ben
2012-06-01 · 知道合伙人软件行家
Ben
知道合伙人软件行家
采纳数:860 获赞数:2875
认真回答者.

向TA提问 私信TA
展开全部
select * from (select ROW_NUMBER() over(order by [标识列] desc) Row,* from 表A) t where t.row between start and end

不知道.你是否能看懂我写的. 你那样会导致你只能查询某一段另外如果按照其他列排序将出错.另外还有..如果ID不连续将有些许其他连带问题..
更多追问追答
追问
我果然看不懂,不过我的方式ID不连续到不会出问题的
追答
如果您遇到的是10W+的数据就明白了撒..
具体的需要您以后遇到各种情况.例如按照ID查询按照另外某字段排序.比如查询最近的邮件发送情况
查询上班打卡情况
查询迟到情况.
工资多少情况等等
简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。
百度网友3c3b599
2012-06-01 · TA获得超过146个赞
知道小有建树答主
回答量:279
采纳率:100%
帮助的人:356万
展开全部
两个where 1=1去掉
追问
嗯,去掉。可是这并不能根本性解决问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
happy09li
2012-06-01 · 贡献了超过177个回答
知道答主
回答量:177
采纳率:0%
帮助的人:46.1万
展开全部
select top 5 * from 表A where ID not in (select top 5 nid from 表A )
and 查询条件1 and 查询条件2 排序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
952817723
2012-06-01
知道答主
回答量:48
采纳率:0%
帮助的人:6.4万
展开全部
太抽象
追问
....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式