MySQL分頁技術(shù)、6種分頁方法總結(jié)
概述
有朋友問: MySQL的分頁似乎一直是個問題,有什么優(yōu)化方法嗎?
網(wǎng)上看到趕集網(wǎng)XX推薦了一些分頁方法,但似乎不太可行,你能點評一下嗎?
方法總結(jié)
方法1: 直接使用數(shù)據(jù)庫提供的SQL語句
語句樣式: MySQL中,可用如下方法: SELECT * FROM 表名稱 LIMIT M,N
適應(yīng)場景: 適用于數(shù)據(jù)量較少的情況(元組百/千級)
原因/缺點: 全表掃描,速度會很慢 且 有的數(shù)據(jù)庫結(jié)果集返回不穩(wěn)定(如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是從結(jié)果集的M位置處取出N條輸出,其余拋棄.
方法2: 建立主鍵或唯一索引, 利用索引(假設(shè)每頁10條)
語句樣式: MySQL中,可用如下方法: SELECT FROM 表名稱 WHERE id_pk > (pageNum10) LIMIT M
適應(yīng)場景: 適用于數(shù)據(jù)量多的情況(元組數(shù)上萬)
原因: 索引掃描,速度會很快. 有朋友提出: 因為數(shù)據(jù)查詢出來并不是按照pk_id排序的,所以會有漏掉數(shù)據(jù)的情況,只能方法3
方法3: 基于索引再排序
語句樣式: MySQL中,可用如下方法: SELECT FROM 表名稱 WHERE id_pk > (pageNum10) ORDER BY id_pk ASC LIMIT M
適應(yīng)場景: 適用于數(shù)據(jù)量多的情況(元組數(shù)上萬). 最好ORDER BY后的列對象是主鍵或唯一所以,使得ORDERBY操作能利用索引被消除但結(jié)果集是穩(wěn)定的(穩(wěn)定的含義,參見方法1)
原因: 索引掃描,速度會很快. 但MySQL的排序操作,只有ASC沒有DESC(DESC是假的,未來會做真正的DESC,期待…).
方法4: 基于索引使用prepare(第一個問號表示pageNum,第二個?表示每頁元組數(shù))
語句樣式: MySQL中,可用如下方法: PREPARE stmt_name FROM SELECT FROM 表名稱 WHERE id_pk > (? ?) ORDER BY id_pk ASC LIMIT M
適應(yīng)場景: 大數(shù)據(jù)量
原因: 索引掃描,速度會很快. prepare語句又比一般的查詢語句快一點。
方法5: 存儲過程類(最好融合上述方法4)
語句樣式: 不再給出
適應(yīng)場景: 大數(shù)據(jù)量. 作者推薦的方法
原因: 把操作封裝在服務(wù)器,相對更快一些。
方法6: 反面方法
網(wǎng)上有人寫使用 SQL_CALC_FOUND_ROWS。 沒有道理,勿模仿
- MySql分頁時使用limit+order by會出現(xiàn)數(shù)據(jù)重復(fù)問題解決
- 為什么MySQL分頁用limit會越來越慢
- mysql分頁的limit參數(shù)簡單示例
- 淺談MySQL分頁Limit的性能問題
- MySQL分頁Limit的優(yōu)化過程實戰(zhàn)
- mysql分頁性能探索
- 淺析Oracle和Mysql分頁的區(qū)別
- SpringMVC+Mybatis實現(xiàn)的Mysql分頁數(shù)據(jù)查詢的示例
- 利用Spring MVC+Mybatis實現(xiàn)Mysql分頁數(shù)據(jù)查詢的過程詳解
- mysql分頁時offset過大的Sql優(yōu)化經(jīng)驗分享
- MySQL分頁分析原理及提高效率
- MySQL優(yōu)化案例系列-mysql分頁優(yōu)化
- 你應(yīng)該知道的PHP+MySQL分頁那點事
- MYSQL分頁limit速度太慢的優(yōu)化方法
- MySQL分頁優(yōu)化
- 8種MySQL分頁方法總結(jié)
- mysql分頁原理和高效率的mysql分頁查詢語句
- MySQL的幾種分頁方式,你知道幾種方式
相關(guān)文章
導(dǎo)致sql執(zhí)行速度慢的幾種情況盤點(生產(chǎn)環(huán)境踩過的坑)
盤點分析MySQL執(zhí)行速度慢可以幫助我們進(jìn)行優(yōu)化MySQL數(shù)據(jù)庫的效率,這篇文章主要給大家盤點介紹了關(guān)于導(dǎo)致sql執(zhí)行速度慢的幾種情況,文中介紹的這些主要是生產(chǎn)環(huán)境踩過的坑,需要的朋友可以參考下2023-03-03
mysql服務(wù)器查詢慢原因分析與解決方法小結(jié)
在開發(fā)的朋友特別是和mysql有接觸的朋友會碰到有時mysql查詢很慢,當(dāng)然我指的是大數(shù)據(jù)量百萬千萬級了,不是幾十條了,下面我們來看看解決查詢慢的辦法2012-04-04
解決MySQL報錯1267 - Illegal mix of coll
這篇文章主要給大家介紹了解決MySQL報錯1267 - Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPL的問題,文中有詳細(xì)的解決方案,需要的朋友可以參考下2023-09-09
MyBatis中實現(xiàn)動態(tài)SQL標(biāo)簽
動態(tài)SQL是MyBatis的一項強(qiáng)大功能,它允許開發(fā)者根據(jù)條件動態(tài)地生成SQL語句,本文主要介紹了MyBatis中實現(xiàn)動態(tài)SQL標(biāo)簽,感興趣的可以可以了解一下2024-09-09
使用Rotate Master實現(xiàn)MySQL 多主復(fù)制的實現(xiàn)方法
眾所周知,MySQL只支持一對多的主從復(fù)制,而不支持多主(multi-master)復(fù)制2012-05-05
mysql使用GROUP BY分組實現(xiàn)取前N條記錄的方法
這篇文章主要介紹了mysql使用GROUP BY分組實現(xiàn)取前N條記錄的方法,結(jié)合實例形式較為詳細(xì)的分析了mysql中GROUP BY分組的相關(guān)使用技巧,需要的朋友可以參考下2016-06-06

