MySQL 百万级分页优化(Mysql千万级快速分页)
时间:2021-07-01 10:21:17
帮助过:45人阅读
=
dblink();
$db->pagesize=20
;
$sql=”select id from collect where vtype=
$vtype”;
$db->execute(
$sql);
$strpage=
$db->strpage();
//将分页字符串保存在临时变量,方便输出
while(
$rs=
$db->
fetch_array()){
$strid.=
$rs[‘id‘].‘,‘
;
}
$strid=
substr(
$strid,0,
strlen(
$strid)-1);
//构造出id字符串
$db->pagesize=0;
//很关键,在不注销类的情况下,将分页清空,这样只需要用一次数据库连接,不需要再开;
$db->execute(“select id,title,url,sTime,gTime,vtype,tag from collect where id in (
$strid)”);
<?php
while(
$rs=
$db->fetch_array()): ?>
<tr>
<td> <?php
echo $rs[‘id‘];?></td>
<td> <?php
echo $rs[‘url‘];?></td>
<td> <?php
echo $rs[‘sTime‘];?></td>
<td> <?php
echo $rs[‘gTime‘];?></td>
<td> <?php
echo $rs[‘vtype‘];?></td>
<td> <a href=”?act=show&id=<?php
echo $rs[‘id‘];?>” target=”_blank”><?php
echo $rs[‘title‘];?></a></td>
<td> <?php
echo $rs[‘tag‘];?></td>
</tr>
<?php
endwhile; ?>
</table>
<?
php
echo $strpage;
通过简单的变换,其实思路很简单:
1)通过优化索引,找出id,并拼成 “123,90000,12000″ 这样的字符串。
2)第2次查询找出结果。
小小的索引+一点点的改动就使mysql 可以支持百万甚至千万级的高效分页!
通 过这里的例子,我反思了一点:对于大型系统,PHP千万不能用框架,尤其是那种连sql语句都看不到的框架!因为开始对于我的轻量级框架都差点崩溃!只适 合小型应用的快速开发,对于ERP,OA,大型网站,数据层包括逻辑层的东西都不能用框架。如果程序员失去了对sql语句的把控,那项目的风险将会成几何 级数增加!尤其是用mysql 的时候,mysql 一定需要专业的dba 才可以发挥他的最佳性能。一个索引所造成的性能差别可能是上千倍!
PS: 经过实际测试,到了100万的数据,160万数据,15G表,190M索引,就算走索引,limit都得0.49秒。
MySQL 百万级分页优化(Mysql千万级快速分页)
标签:... 支持 表设计 设计 填充 erp 数据库设计 速度 应该