乐观 发表于 2015-1-16 20:12:57

发布MySQL查询中的分页思绪的优化

MySQL的双许可模式意味着,那些希望对数据库具有额外控制的人可以直接从数据库厂商那儿得到帮助。MySQLAB公司提供了支持和维护服务,诸如代码更新和补丁修补服务等,每年订阅费为大约3000美元。作者:steeven
仿佛会商分页的人很少,岂非人人都沉浸于limitm,n?
在有索引的情形下,limitm,n速率充足,但是在庞大前提搜刮时,
wheresomthingorderbysomefield+somefield
MySQL会搜遍数据库,找出“一切”切合前提的纪录,然后掏出m,n笔记录。
假如你的数据量有几十万条,用户又搜刮一些很普通的词,
然后要顺次读最初几页重温旧梦。。。mysql该很悲壮的一直操纵硬盘。
以是,能够试着让mysql也存储分页,固然要程序共同。
(这里只是提出一个假想,接待人人一同会商)
asp的分页:在ASP体系中有Recordset工具来完成分页,可是大批数据放在内存中,并且不晓得甚么时分才生效(请ASP妙手
指导).
SQL数据库分页:用存储历程+游标体例分页,详细完成道理不是很分明,假想假如用一次查询就失掉必要的了局,大概是
id集,必要后续页时只需依照了局中的IDs读出相干纪录。如许只需很小的空间保存本次查询的一切IDs.(SQL中的查询结
果不晓得如何分明过时渣滓?)
如许,可让mysql摹拟存储分页机制:
1.selectidfrom$tablewhere$conditionorderby$fieldlimit$max_pages*$count;
查询切合前提的IDs.
限制最年夜切合前提的纪录数目,也能够不加。
2.由于php在实行停止后一切变量都要lost,以是能够思索:
计划a.在mysql创建一时表,查询了局用一个工夫或随机数作为独一标记拔出。
个中创建page1~pagen个字段,每一个字段保留该页中必要的ids,如许一个id对一笔记录.
计划b.假如翻开session,也能够放在session中保留,实践上是放在文件中保留。
创建一个$IDs数组,$IDs~$IDs[$max_pages].思索到偶然候用户会开几个
窗口同时查询,要为$ids做一个独一标记,制止查询了局互相掩盖。二维数组
和$$var都是好举措。
3.在每页页的哀求中,间接找到对应的IDs,两头以","距离:
select*from$tablewhereidin($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都供应了更先辈的关头词索引查询。
不断改进,以上只是举一反三,接待配合切磋分页成绩。(也可关于别的数据库)
但愿有一天能把各类分页体例收拾出来供老手参考。
人们常说“成功孕育成功”,这种说法明显非常适合MySQL的情况。MySQL学习教程这个开源数据库号称在全世界有超过110万份的完全安装。

因胸联盟 发表于 2015-1-18 18:49:06

所以你总能得到相应的升级版本,来满足你的需求。

第二个灵魂 发表于 2015-1-26 21:23:08

可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。

小女巫 发表于 2015-2-4 21:51:06

我个人认为就是孜孜不懈的学习

再见西城 发表于 2015-2-10 21:07:20

从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。

深爱那片海 发表于 2015-3-10 19:57:49

而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~

愤怒的大鸟 发表于 2015-3-17 10:11:34

多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油

小妖女 发表于 2015-3-24 07:19:15

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
页: [1]
查看完整版本: 发布MySQL查询中的分页思绪的优化