当前位置:七道奇文章资讯数据防范MySQL防范
日期:2011-05-02 15:44:00  来源:本站整理

MySQL 查询中的分页思绪的优化[MySQL防范]

赞助商链接



  本文“MySQL 查询中的分页思绪的优化[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
 

复杂条件搜索时,where somthing order by somefield+somefieldMySQL会搜遍数据库,找出"全部"符合条件的记录,然后取出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(); 在一按时间今后不操作视为过期数据.

假如要优化,可以考虑用把1和2.a中的语句归并成select ...... into ....

  以上是“MySQL 查询中的分页思绪的优化[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • mysql数据库插入速度和读取速度的调整记录
  • MySQL Order By索引优化办法
  • MySQL Order By用法分享
  • mysql #1062 –Duplicate entry ''1'' for key ''PRIMARY''
  • MySQL Order By Rand()效率解析
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .