一般來說,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里帖子搞個幾百萬還是很輕松的。
所以。。。還是換個方式好點。