PHP分页代码中的SQL语句可以换个写法

一般来说,PHP写分页功能时,只要用的还是MySQL,基本都是两步走

1、取得总数,算页数。SQL语句自然是SELECT count(*) FROM tablename;

2、根据指定的页码号,取得相应的数据。对应的SQL语句,在网上随便查,都是一样的:

    SELECT f1,f2 FROM table LIMIT offset,length

语法,不解释了。

数据量小的时候,这么写,没事。

如果数据量大呢?不是一般大,上百万呢。

 

试着运行一下:

SELECT id FROM users LIMIT 1000000,10

在我的电脑上,第一次运行,显示如下:

10 rows in set (9.38 sec)

之后再运行,显示如下:

10 rows in set (0.38 sec)

这不奇怪。MySQL对已经运行的SQL语句有缓冲,可以很快把之前的数据拿出来。

 

无论如何,第一次的9秒多,我实在不能接受。

换个写法:

SELECT id FROM users WHERE id>1000000 LIMIT 10;

显示:10 rows in set (0.00 sec)

 事实上,用phpMyAdmin去看,“显示行 0 - 9 (10 总计, 查询花费 0.0011 秒)”,之后再运行,基本都在0.0003秒左右。

 

原理?不想解释了。

 

当然,对绝大多数实际的WEB应用来说,需要分页的地方往往数据量不大,几百上千就算多了。对这样的数据量,效率的提升可以忽略不计。费那个劲,吃饱了撑的!

 

可我也不是犯贱啊!!~~平白无故的为啥要改呢?因为俺要在首页显示最新的几篇博客文章,最新的几个BBS帖子,最新的几条评论。。。即使考虑在校园网的环境里,用户数不算很多(10万以下),但BBS里帖子搞个几百万还是很轻松的。

 

所以。。。还是换个方式好点。

 

转载于:https://www.cnblogs.com/tecfaq/archive/2012/03/09/2386033.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值