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里帖子搞個幾百萬還是很輕松的。

 

所以。。。還是換個方式好點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM