据库查询不能只考虑数据库的负载,还要考虑网络和应用的负载,tcp连接是很昂贵的,即使有了连接池,大量的使用N+1查询也是不明智的。至于第二个问题,当查询条件不一样时命中率会有多高?如果N比较大(比如100)假设你的命中率是80%,这已经很高了,那么你每次请求都会需要20次数据库查询,到最后可能需要将几乎整个数据库都缓存在内存中才能抵消n次查询带来的性能损失。
如果只是想在电脑上查看,解决方法:视图——分页预览
如果要打印,每页都有红色那一行的标题,解决方法:文件——页面设置——工作表——打印标题-顶端标题行——右边红色按钮——选中你截图的红色那一行——确定。 这样打印的时候,每页最上面一行都是你选中的那一行内容
不想看这个代码,给你我写的
ASP部分直接放到OPEN下面,修改rspagesize和shownum,把6asp修改成你的显示页,就什么都不用管了,你先看看效果:
<< < 1 2 3 4 5 > >>,当前页次数字为红色,也提供文本框,输入数字直接跳转到具体页
<style type="text/css">
<!--
A:link {COLOR: #000000; TEXT-DECORATION: none}
A:visited {COLOR: #000000; TEXT-DECORATION: none}
A:active {COLOR: #000000; TEXT-DECORATION: underline}
A:hover {COLOR: #000000; TEXT-DECORATION: underline}
Aa01:link {text-decoration:none;color:#FF0000;}
Aa01:visited {color:#FF6600;}
Aa01:active {color:#FF6600;font-weight: normal;}
Aa01:hover {color:#FF6600;text-decoration: none;}
-->
</style>
<%
rspagesize=2
shownum=3 '每页数字分页显示分页序号的数目
rct=shownumrspagesize
if requestquerystring("wpage")<>"" and isnumeric(requestquerystring("wpage"))=true then
pagenum=int(requestquerystring("wpage"))rspagesize-rspagesize+1
'根据获取的分页序号,计算此分页第1条数据位置
end if
if requestquerystring("pagenum")<>"" and isnumeric(requestquerystring("pagenum"))=true then
pagenum=int(requestquerystring("pagenum"))
end if
if (pagenum mod rct)=0 then '计算当前 分页所在页次,不是分页序号,注意区分概念
nowpage=pagenum /rct
else
nowpage=int(pagenum/rct)+1
end if
if nowpage<1 or pagenum > rsrecordcount then '判断参数是否超出范围
nowpage=1
pagenum=1
end if
fstpagenum=(nowpage-1)rct+1 '计算当前分页页次第一条数据
endpagenum=nowpagerct '计算当前分页页次最后一条数据
fstpage=nowpageshownum-shownum '计算当前页次的第一分页序号
endpage=nowpageshownum '计算当前页次最后分页序号
uppagenum=fstpagenum-rspagesize
nextpagenum=endpagenum+1
'将记录指针移到具体数据
rsabsoluteposition=pagenum
nowpage_fen=pagenum-1+rspagesize
if nowpage_fen mod rspagesize =0 then
nowpage_fen=nowpage_fen/rspagesize
else
nowpage_fen=nowpage_fen+1
end if
if nowpage_fen>rspagecount then
nowpage_fen=1
end if
%>
<%responseWrite "当前显示第" & nowpage_fen & "页记录"%>
,每页显示<%=rspagesize%>条,<%=rsrecordcount%>条记录分<%=rspagecount%>页<br>
<%
for i=0 to rspagesize
if i < rspagesize then
i=+i
if rsbof=false and rseof=false then
responsewrite rsFields("title") & "<br>"
rsmovenext
end if
end if
next
%><br>
<% if fstpage>1 then ' 用当前页次的第一分页序号判断是否还有前一页次
responseWrite "<a href=6aspwpage=1>" & "第1页" & "</a> "
responseWrite "<a href=6asppagenum=" & uppagenum & ">"& "<<" & "</a> "
end if
if nowpage_fen>1 then
responseWrite "<a href=6aspwpage=" & nowpage_fen-1 & ">"& "<" & "</a> "
end if%>
<%
for i=fstpagenum to endpagenum step(rspagesize)
if i < endpagenum and i <= rsrecordcount then
fstpage=fstpage+1
if i=pagenum then
responsewrite "<a class=a01 href=6asppagenum=" & i& ">"
else
responsewrite "<a href=6asppagenum=" & i & ">"
end if
responsewrite fstpage & "</a> "
end if
next
%>
<%if nowpage_fen < rspagecount then
responseWrite "<a href=6aspwpage=" & nowpage_fen+1 & ">"& ">" & "</a> "
end if
if endpage< rspagecount then ''用当前页次的最后分页序号判断是否还有下一页次
responseWrite "<a href=6asppagenum=" & nextpagenum & ">"& ">>" & "</a> "
responseWrite "<a href=6aspwpage=" & rspagecount & ">"& "最末页" & "</a> "
end if%>
<form id="form1" method="get" action="6asp">
转到第
<input name="wpage" type="text" size="3" maxlength="3" >
页
<input type="submit" value="提交">
</form>
<%rsClose()
Set rs = Nothing
%>
select from everyday where riqi >= '"&riqiks_a&"' and riqi<='"&riqijs_a&"' and beizhu='"&beizhu_a&"' order by riqi desc
不过建议日期型,不要用这种计算,低效率了
应该riqi between '"&riqiks_a&"' and '"&riqijs_a&"' 比较高效些
关键就是这句话了,与下面分页连接没有啥关系,你把这个在查询分析器器,哦,MYSQL是PHPmyadmin,把上述代码赋值后测试一下实际的记录数,如果记录数和你程序中的结果不一致,很明显你结果显示的循环模块出问题了
在SQL2005中,使用ROW_NUMBER()进行分页,效率极高
DECLARE @pagenum AS INT, @pagesize AS INT
SET @pagenum = 2
SET @pagesize = 10
SELECT
FROM (SELECT ROW_NUMBER() OVER(ORDER BY newsid DESC) AS rownum,
newsid, 其它字段名 FROM 表名 where 条件) AS D
WHERE rownum BETWEEN (@pagenum-1)@pagesize+1 AND @pagenum@pagesize
每次取的数据集是有总条数的
数据集 有当前页,总页数的属性
然后就可以分页啦
rspagecount
rsabsolutepage
MYSQL 分页最简单了 SELECT FROM Account WHERE (usertype='base' or usertype='home' or usertype='salse') and logindate is not null order by logindate desc LIMIT 起始行, 每页多少行 LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)
以上就是关于数据库避免n+1,但是怎么分页全部的内容,包括:数据库避免n+1,但是怎么分页、最近遇到一个分页问题,该如何计算每页的起始地址,由于没有存到数据库,分页时每次都要重新生成IP地址、ASP的分页问题(运行结果为一个空白且读不出数据库的东东)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)