mysql表百萬級數據優化limit分頁(自己建的數據 只有一百多萬)

1.問題

前幾天老大在羣裏拋出這個問題說:問個問題,千萬級的表查詢分頁,怎麼優化查詢
select * from user limit 10000000,10
select * from user where name="a" limit 10000000,10

2.實驗

經過驗證發現以上語句在數據庫中執行 (100萬條數據時候)至少需要2.7s ,這簡直不符合規範,當然爲了完成這個難題所以就簡單測了一下(現實場景中很少用到查幾百萬分頁後的數據)。

2.1 自己的第一反應就是建立索引,或者是根據索引查詢。所以採用臨時表的方式,先查出主鍵id ,然後在去查找所有值,

SELECT  * FROM USER a JOIN (SELECT    id   FROM   USER  LIMIT 3225190, 10) b ON a.id = b.id   0.5s左右

SELECT   * FROMUSER  a  JOIN    (SELECT     id    FROM  USER WHERE NAME ="池恆"   LIMIT 3225190,10) b  ON a.id = b.id  1.7s左右

結論:當臨時表沒有where查詢時,其實並不會快多少,但是沒有where查詢的臨時表 ,速度快了5倍左右。

其實還是不符合自己想要的規範。

2.2 終極殺招

爲了能更加優化查詢,自己經過查找發現,建立聯合索引是一個好的方法,where 的條件 和主鍵id 作爲索引 serach(name,id)

第一次建立索引時候 是id 在前 name在後,這樣確實也解決這樣的問題,都變成0.5s左右 ,但是還不是我想要的 ,最後上網搜索答案,發現建立聯合索引順序不同,性能也就大大提高,於是把建立索引順序變成是id 在後 name在前。結果打出意料 ,速度變成了0.05秒 。性能大幅度提升,當然具體原因還沒有搞清楚,後續繼續分析 特此記錄。

3.結果

建立聯合索引,性能提升。當然這只是一種實現方式,顯示場景中最好不要查詢幾百萬數據之後數據 給用戶展示也不需要這麼多,當然還有的就是分表查詢(沒有嘗試過,後期嘗試繼續更新)

小白一個,如有不對,請指出。謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章