千萬級MySQL分頁優化

2021-08-20 12:40:17 字數 1715 閱讀 7068

對於只有幾萬條資料的表這樣做當然沒問題,也不會在使用者體驗上有何不妥,但是要是面對成百萬上千萬的資料表時,這樣就不足以滿足我們的業務需求了,如何做到對千萬級資料表進行高效分頁?首先要學會使用 explain 對你的sql進行分析,如果你還不會使用 explain 分析sql語句 傳送門

一丶合理使用 mysql 查詢快取 結合復合索引進行查詢分頁

開啟查詢快取的原因是為了增大吞吐率,提公升查詢的效能

query_caceh_type 是否開啟查詢快取

0 表示不開啟查詢快取, 

1 表示始終開啟查詢快取(不要快取使用sql_no_cache) ,

2 表示按需開啟查詢快取 (需要快取使用 sql_cache)。

query_cache_size 給快取分配的最大記憶體空間 

對於查詢快取的一些操作。

flush query cache; // 清理查詢快取記憶體碎片。

reset query cache; // 從查詢快取中移出所有查詢。

flush tabname; //關閉所有開啟的表,同時該操作將會清空查詢快取中的內容。

分頁說到底也是查詢的一種,既然是查詢我們就可以為他設定索引來提高查詢速度

復合索引)

二丶sql語句的優化(不使用索引)

這裡有一張千萬級別的資料表,表結構如下

使用 select * from limit 0,10 分別對錶進行常規分頁,當偏移量達到一百萬和七百萬時的對比如下

當偏移量達到七百萬時 的查詢時間是1.57s,現在這在我們得業務場景中是不能被應用的,接下來對這句sql進行優化

a.  查詢出最大偏移量的uid,再進行分頁 (select uid,u_name,u_age,u_***,u_is_delete from u_user where uid >=(select uid from `u_user` limit 7000000, 1) limit 10)

b.先去查詢到最大偏移量然後再進行分頁,這樣看來時間好像變得更長了,顯示這種方式不符合我們的場景,對這句sql再次進行優化 (select uid,u_name,u_age,u_***,u_is_delete from u_user where uid>7000000 limit 10;)

非常棒的查詢時間,0.001s,幾乎是秒查詢,這樣即使是千萬級的資料表分頁起來也能輕鬆應對

oracle分頁查詢千萬級優化

在做比對專案時,有表是3千萬多的資料,在頁面做分頁查詢時很卡40s,反正差不多一分鐘的時間,後來更了sql,優化了 就好了很多,4s就可以了 sql是取條數時不要用and,between這些 優化後的sql select from select c.a.rownum rn from tt crm c...

MySQl優化千萬資料級快速分頁sql語句

現在我們使用mysql對資料庫分頁就是直接使用limit了,這個是沒有錯誤了,如果幾萬條資料沒一種問題,如果是千萬條記錄你就會想死的心都有了,下面我來給各位朋友分析 資料表 collect id,title info vtype 就這4個字段,其中 title 用定長,info 用text,id 是...

mysql千萬級如何優化?

1 查詢語句上,只寫必要的字段,建好索引,注意一下查詢條件的使用,多表查詢不要用框架 自己寫sql 2 一定要分頁 一些小表也養成習慣,哪怕你在前台設定多一點可選記錄數選項 如,10,50,100,500,1000 區域網環境 不能再多了孩子 3 在一定數量的基礎上,做好表分割槽 4 拆表 5 拆庫...