mysql分頁查詢實例講解

小云云
發布: 2018-01-30 17:22:44
原創
1739 人瀏覽過

LIMIT子句可以用來強制 SELECT 語句傳回指定的記錄數。 LIMIT 接受一個或兩個數字參數。參數必須是一個整數常數。如果給定兩個參數,第一個參數指定第一個傳回記錄行的偏移量,第二個參數指定傳回記錄行的最大數目。初始記錄行的偏移量是 0(而不是 1)。下面,我們針對特例對mysql分頁查詢進行總結。

mysql提供分頁的功能:

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
登入後複製

最簡單的用法就是:

select * from table limit ?,?
登入後複製

這種是最簡單的limit分頁查詢。配合where條件使用:

select * from table where column > ? order by id limit ?,?
登入後複製

上邊這種情況,建議在column和id建立複合索引比較好。  
以上兩種情況,對於小資料量分頁查詢時,這樣的sql就夠用了。但是對於百萬以上的資料表,如果使用上邊的sql 的話,越往後limit語句的偏移越來越大,查詢就會變得越來越慢。類似於:

select * from `user` where `cate`='陕西' order by id limit 100000,10
登入後複製

為了避免這種查詢,我們可以透過子查詢的方式來提高查詢效率。

select * from `user` where id >=(select * from `user` where `cate`='陕西' order by id limit 100000,1) and `cate`='陕西' limit 10
登入後複製

透過explain我們可以看出直接limit查詢和透過子查詢的差距:

#直接limit查詢:
##typepossible_keyskeykey_lenrefrowsExtra#ALL(NULL)(NULL)(NULL)(NULL)4076607
子查詢分頁查詢:
##typePRIMARY #SUBQUERY可以看出,
possible_keys key key_len ref rows #Extra
range PRIMARY PRIMARY #4 2038331 Using where
index (NULL) #PRIMARY 4 4076663 Using index
透過子查詢的方式,子查詢是在索引上進行的,而普通的查詢是在資料檔案上進行的。

通常來說,索引檔案要比資料檔案小的多,所以操作索引檔案更直接有效率。 此外,還可以透過

join分頁

方式

SELECT * FROM `user` AS t1 
JOIN (SELECT id FROM `user` ORDER BY id LIMIT 100000, 1) AS t2 
WHERE t1.id <= t2.id ORDER BY t1.id LIMIT 10;
登入後複製
join分頁和子查詢分頁的效率基本上在一個等級上。 (但是,子查詢需要在記憶體中建立臨時表,查詢完畢後,MySQL需要撤銷這些臨時表。透過join可以避免這種情況)在分頁查詢前,可以進行判斷,如果是在限定頁數內,就使用基本分頁查詢,大於則使用子查詢分頁處理。

相關推薦:


mysql分頁效能探索

MySQL分頁優化的測試案例

MySQL分頁效能最佳化指南

以上是mysql分頁查詢實例講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!