⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 455.html

📁 Jsp精华文章合集,JSP方面各种知识介绍
💻 HTML
字号:

<STYLE type=text/css>
<!--
body,td { font-size:9pt;}
hr { color: #000000; height: 1px}
-->
</STYLE>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD><TITLE>论坛精华 >> SQL之家 >> mysql让存储结果分页,用于复杂查询</title>
</head>
<body >

<p><IMG SRC="../image/jsp001_middle_logo.gif" WIDTH="180" HEIGHT="60" BORDER=0 ALT=""></p>

<table width=100% bgcolor="#cccccc" align=center cellpadding="2" cellspacing="0" border=1 bordercolorlight="#000000" bordercolordark="#FFFFFF">
<tr bgcolor="#EFF8FF"><td>
<a href=http://www.jsp001.com/list_thread.php?int_attribute=4>论坛精华</a>
>> <a href=http://www.jsp001.com/list_thread.php?forumid=45&int_attribute=4>SQL之家</a>
>> mysql让存储结果分页,用于复杂查询 [<a href=http://www.jsp001.com/forum/showthread.php?goto=newpost&threadid=455>查看别人的评论</a>]<br>

<hr><p>由 amtd 发布于: 2001-02-15 09:45</p><p><img src="images/icons/icon1.gif" alt="Post" border=0> </p><p><br><br>网友【steeven】 创作<br>mysql让存储结果分页,用于复杂查询。<br><br>似乎讨论分页的人很少,难道大家都沉迷于limit m,n?<br>在有索引的情况下,limit m,n速度足够,可是在复杂条件搜索时,<br>where somthing order by somefield+somefield<br>mysql会搜遍数据库,找出“所有”符合条件的记录,然后取出m,n条记录。<br>如果你的数据量有几十万条,用户又搜索一些很通俗的词,<br>然后要依次读最后几页重温旧梦。。。mysql该很悲壮的不停操作硬盘。<br><br>所以,可以试着让mysql也存储分页,当然要程序配合。<br>(这里只是提出一个设想,欢迎大家一起讨论)<br><br>ASP的分页:在ASP系统中有Recordset对象来实现分页,但是大量数据放在内存中,而且不知道什么时候才失效(请ASP高手<br>指点). <br>SQL数据库分页:用存储过程+游标方式分页,具体实现原理不是很清楚,设想如果用一次查询就得到需要的结果,或者是<br>id集,需要后续页时只要按照结果中的IDs读出相关记录。这样只要很小的空间保留本次查询的所有IDs. (SQL中的查询结<br>果不知道怎样清楚过期垃圾?)<br><br>这样,可以让mysql模拟存储分页机制:<br>1. select id from $table where $condition order by $field limit $max_pages*$count;<br>   查询符合条件的IDs.<br>   限定最大符合条件的记录数量,也可以不加。<br>2. 因为php在执行结束后所有变量都要lost,所以可以考虑:<br>   方案a. 在mysql建立临时表,查询结果用一个时间或随机数作为唯一标志插入。<br>      其中建立page1~pagen个字段,每个字段保存该页中需要的ids, 这样一个id对一条记录.<br>   方案b. 如果打开session,也可以放在session中保存,实际上是放在文件中保存。<br>         建立一个$IDs数组,$IDs[1]~$IDs[$max_pages]. 考虑到有时候用户会开几个<br>         窗口同时查询,要为$ids做一个唯一标志,避免查询结果相互覆盖。二维数组<br>         和$$var都是好办法。<br>3. 在每页页的请求中,直接找到对应的IDs,中间以","间隔:<br>    select * from $table where id in ($ids); 速度绝对快<br>4. 收尾要考虑查询结果的自动清楚,可以设置定时或者按比例随机清楚。如果用mysql临时表要加上一个时间标志字段,<br>session中要加入$IDs["time"]=time(); 在一定时间以后不操作视为过期数据。<br><br>5. 如果要优化,可以考虑用把1和2.a中的语句合并成select ...... into ....<br><br>Note:<br>1.以上只是针对mysql的修补方案,希望mysql哪天能把这些功能加进去<br>2.其它数据库也可以套用。<br>3.如果其它数据库还有更先进的分页方式,请告诉我或mailto: steeven@kali.com.cn<br>4.如果真的有很多数据要查询,还是和mysql再见吧,sql,oracle都提供了更先进的关键词索引查询。<br><br>精益求精,以上只是抛砖引玉,欢迎共同探讨分页问题。(也可关于其它数据库)<br>希望有一天能把各种分页方式整理出来供新手参考。<br><br> <br><br>__________________<br><font color=red>真实源于生活! </font><br>请访问我们的网站: <br>(VB爱好者乐园) <br><a href="http://www.vbgood.com" target=_blank>http://www.vbgood.com</a><br><a href="http://www.d1vb.com" target=_blank>http://www.d1vb.com</a><br><a href="http://61.128.97.225/vbgood/index.asp" target=_blank>http://61.128.97.225/vbgood/index.asp</a><br>拥有1800多个资料! </p></td>
  </tr>
</table>

<p>
<CENTER><a href="http://www.jsp001.com/forum/newreply.php?action=newreply&threadid=455">点这里对该文章发表评论</a></CENTER>
<p>该文章总得分是 <font color=red>2</font> 分,你认为它对你有帮助吗?
				[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=455&intVote=4","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>非常多</a>](<font color=red>0</font>) 
				[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=455&intVote=2","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>有一些</a>](<font color=red>1</font>) 
				[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=455&intVote=1","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>无帮助</a>](<font color=red>0</font>) 
				[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=455&intVote=-1","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>是灌水</a>](<font color=red>0</font>) </p>
<script language="javascript" src="http://www.jsp001.com/include/read_thread_script.php?threadid=455"></script>
<p><CENTER>
Copyright &copy; 2001 - 2009 JSP001.com . All Rights Reserved <P>

<IMG SRC="../image/jsp001_small_logo.gif" WIDTH="85" HEIGHT="30" BORDER=0 ALT="">
</CENTER></p>

</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -