MySQL 海量資料的 5 種分頁方法和優化技巧

業餘草發表於2019-03-08

點選上方“業餘草”,選擇“置頂公眾號”

第一時間獲取技術乾貨和業界資訊!


640?wx_fmt=png


640?wx_fmt=png


昨天,群裡有一個網友問我關於 MySQL 大資料量分頁的問題。有人回答說用快取 Redis,這個就比較麻煩了。而且別人問的是 MySQL 分頁,而不是架構如何設計!


那麼我今天就來分享一下,5 種常見的 MySQL Limit 分頁方法和優化技巧。


第一種方法,直接使用資料庫提供的 SQL 語句 limit 來分頁。


640?wx_fmt=png

適用於資料量較少的情況。缺點是,全表掃描,速度會很慢且有的資料庫結果集返回不穩定(如某次返回1,2,3,另外的一次返回2,1,3)。Limit 限制的是從結果集的 M 位置處取出 N 條輸出,其餘拋棄。


方法二,建立主鍵或唯一索引,利用索引(假設每頁 10 條)。


640?wx_fmt=png


適用於資料量較多的情況。這樣方法,會使用索引掃描,速度會很快。如果你的資料查詢出來並不是按照 pk_id 排序的,那麼就有可能漏掉資料的情況。所以使用的時候要注意。不行的話,你就用方法三。


方法三,基於索引再排序。


640?wx_fmt=png


這種方法適用於資料量較多的情況。最好 ORDER BY 後的列物件是主鍵或唯一索引,使得 ORDER BY 操作能利用索引。


這種方法的特點是索引掃描,速度會很快。


方法四,基於索引使用 prepare(第一個問號表示 pageNum,第二個 ?表示每頁元組數)。


640?wx_fmt=png


這個 SQL 很厲害,適合海量資料的場景。這個查詢會使用索引掃描,速度會很快。prepare 語句又比一般的查詢語句快一點。


方案五,利用 MySQL 支援 ORDER 操作可以利用索引快速定位部分元組,避免全表掃描。


例如:讀第 101000 到 101019 行元組( pk 是主鍵/唯一鍵)。


640?wx_fmt=png


時間關係,我都不貼測試資料了。有問題,明天群裡討論。


學習是時刻進行的,不能遇到問題了,才去學。那就晚了,還是下面這個課程,很便宜。想深入理解 MySQL,建議你還是看看吧,返現還在進行,通過我的二維碼購買,返現 5 元紅包。


640


知識無價,這還不夠你一頓飯錢,也不夠你一包煙錢。


640

10T技術資源大放送!包括但不限於:C/C++,Linux,Python,Java,PHP,人工智慧,GO等等。在公眾號內回覆對應關鍵字或框架名字,即可免費獲取!!

640?wx_fmt=png

 你再主動一點點 640?  我們就有故事了

相關文章