SQL優化-大數據量分頁優化


  百萬數據量SQL,在進行分頁查詢時會出現性能問題,例如我們使用PageHelper時,由於分頁查詢時,PageHelper會攔截查詢的語句會進行兩個步驟

  1.添加 select count(*)from (原查詢sql) ,用於統計查詢的總數

  2.拼接 limit startPage,number 用於分頁

  

  此時有兩個問題

    第一個問題是:

      用於統計的 select count(*)from (原查詢sql)在數據量大時速度慢

    第二個問題時:

      limit startPage,number 在大數據量時效率低

  

  解決方案:

    第一個問題:

      在數據量過大時,不使用分頁插件PageHelper,select count(*)from (原查詢sql)固定返回一個固定值給到前端,例如千萬級數據,固定返回1千萬

    第二個問題:

      在數據量過大時,不使用分頁插件PageHelper ,使用join或者子查詢去優化

      例如 id為主鍵,name為非唯一索引

        優化前:

        select id,name,brand from table where name=‘xxx’ limit 100000,10

        優化后:

        select aa.id,name,brand from table inner join (select id from table bb where name ='xxx' limit 100000,10) bb where aa.id=bb.id

        原因是解決

          非聚簇索引的葉子節點是聚簇索引的節點值,聚簇索引的葉子節點值才是數據的物理位置,

        優化前會花費大量的隨機IO到找到聚簇索引,優化后則減少了尋找聚簇索引位置的時間;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM