|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。mysql|分页|优化 作者:steeven
仿佛会商分页的人很少,岂非人人都沉浸于limit m,n?
在有索引的情形下,limit m,n速度足够,可是在庞杂前提搜刮时,
where somthing order by somefield+somefield
mysql会搜遍数据库,找出“一切”合适前提的纪录,然后掏出m,n笔记录。
假如你的数据量有几十万条,用户又搜刮一些很浅显的词,
然后要顺次读最初几页重温旧梦。。。mysql该很悲壮的一直操作硬盘。
所以,可以试着让mysql也存储分页,固然要法式共同。
(这里只是提出一个假想,接待人人一同会商)
ASP的分页:在ASP体系中有Recordset对象来完成分页,然而大批数据放在内存中,并且不晓得甚么时分才生效(请ASP高手
指导).
SQL数据库分页:用存储进程+游标体例分页,详细完成道理不是很清晰,假想假如用一次查询就失掉需求的了局,或是
id集,需求后续页时只需依照了局中的IDs读出相干纪录。如许只需很小的空间保存本次查询的一切IDs. (SQL中的查询结
果不晓得如何清晰过时渣滓?)
如许,可让mysql摹拟存储分页机制:
1. select id from $table where $condition order by $field limit $max_pages*$count;
查询合适前提的IDs.
限制最大合适前提的纪录数目,也能够不加。
2. 由于php在履行停止后一切变量都要lost,所以可以思索:
计划a. 在mysql创立一时表,查询了局用一个工夫或随机数作为独一标记拔出。
个中创立page1~pagen个字段,每一个字段保留该页中需求的ids, 如许一个id对一笔记录.
计划b. 假如翻开session,也能够放在session中保留,实践上是放在文件中保留。
创立一个$IDs数组,$IDs[1]~$IDs[$max_pages]. 思索到有时分用户会开几个
窗口同时查询,要为$ids做一个独一标记,防止查询了局互相掩盖。二维数组
和$$var都是好举措。
3. 在每页页的恳求中,直接找到对应的IDs,两头以","距离:
select * from $table where id in ($ids); 速度相对快
4. 扫尾要思索查询了局的主动排除,可以设置准时或按比例随机清晰。假如用mysql一时表要加上一个工夫标记字段,
session中要到场$IDs["time"]=time(); 在必定工夫今后不操作视为过时数据。
5. 假如要优化,可以思索用把1和2.a中的语句兼并成select ...... into ....
Note:
1.以上只是针对mysql的修补计划,但愿mysql哪天能把这些功效加出来
2.其它数据库也能够套用。
3.假如其它数据库还有更先辈的分页体例,请告知我或mailto: steeven@kali.com.cn
4.假如真的有良多数据要查询,仍是和mysql再会吧,sql,oracle都供应了更先辈的关头词索引查询。
不断改进,以上只是抛砖引玉,接待配合切磋分页成绩。(也可关于其它数据库)
但愿有一天能把各类分页体例收拾整顿出来供老手参考。
在这里想谈谈自己这六个多月的PHP学习心得,希望对给比我还新的新手们有所帮助,讲的不是很深刻,甚至有的想法可能是错误的,希望不要误导新人才好,大家要有自己的主见。 |
|