您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關MySQL中怎么實現百萬級數據量分頁查詢,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
方法一:直接使用數據庫提供的SQL語句
語句樣式:MySQL中可用如下方法:
select * from table_name limit m, n;
適用場景:適用于數據量較少的情況(元組百/千級)
原因/缺點: 全表掃描,速度會很慢 且 有的數據庫結果集返回不穩定(如某次返回1,2,3,另外的一次返回2,1,3). limit限制的是從結果集的 m 位置處取出 n 條輸出,其余拋棄.
方法二:建立主鍵或唯一索引,利用索引(假設每頁10條)
語句樣式: MySQL中,可用如下方法:
select * from table_name where id_pk > (pageNum*10) limit m;
適應場景: 適用于數據量多的情況(元組數上萬)
原因: 索引掃描,速度會很快. 有朋友提出: 因為數據查詢出來并不是按照pk_id排序的,所以會有漏掉數據的情況,只能方法3
方法三:基于索引再排序
語句樣式,MySQL中可用如下方法:
select * from table_name where id_pk > (pageNum * 10) order by id_pk asc limit m;
適應場景: 適用于數據量多的情況(元組數上萬). 最好 order by 后的列對象是主鍵或唯一所以,使得 order by 操作能利用索引被消除但結果集是穩定的(穩定的含義,參見方法1)
原因: 索引掃描,速度會很快. 但MySQL的排序操作,只有 asc 沒有 desc ( desc 是假的,未來會做真正的 desc ,期待…).
方法四:基于索引使用prepare
第一個問號表示pageNum,第二個問號表示每頁元組數
語句樣式,MySQL中可用如下方法:
prepare stmt_name from select * from table_name where id_pk > (? * ?) order by id_pk asc limit m;
適應場景: 大數據量
原因: 索引掃描,速度會很快. prepare語句又比一般的查詢語句快一點。
方法五:利用MySQL支持order操作可以利用索引快速定位部分元祖,避免全表掃描
比如:讀第1000到1019行元組(pk是主鍵/唯一鍵).
select * from your_table where pa >= 1000 order by pk asc limit 0,20;
方法六:利用"子查詢/連接+索引"快速定位元祖的位置,然后再讀取元祖。
比如(id是主鍵/唯一鍵,藍色字體時變量)
利用子查詢示例:
select * from your_table where id <= (select id from your_table order by id desc limit ($page - 1) * $pagesize order by id desc limit $pagesize)
利用連接示例:
select * from your_table as t1join (select id from your_table order by id desc limit ($page - 1) * $pagesize as t2 where t1.id <= t2.id order by t1.id desc limit $pagesize);
mysql大數據量使用limit分頁,隨著頁碼的增大,查詢效率越低下。
上述就是小編為大家分享的MySQL中怎么實現百萬級數據量分頁查詢了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。