資料庫全表查詢之-分頁查詢優化

老頭學程式設計發表於2020-12-31

我們在專案中經常會使用到分頁查詢,之前最常用from-size模式,即“select * from tableName where is_del = 0 limit #{from},#{size} ”,剛開始資料量比較小的情況下還沒看出有什麼缺點,但是當資料量為百萬、千萬級別以上資料時,會發現分頁查詢越來越慢,會嚴重影響前端頁面的反映速度。
網上有好幾種分頁查詢優化的方法,比如:

  • 使用子查詢優化;
  • 使用ID限定優化;
  • 使用臨時表優化;

它們從不同的角度來提升查詢速度,但是從學習和理解成本講,我還是最常用使用ID限定優化,分頁效果還是蠻好的。

使用ID限定優化

使用ID限定優化就是利用ID索引,來加快查詢速度,但是這種方式有個前提條件-假設資料庫表的ID欄位是連續遞增的;這樣我們可以根據查詢的頁數和查詢的記錄數來計算出要查詢的ID範圍,然後使用id-between-and來查詢:

select * from orders where is_del = 0 and id between 1000000 and 1000100 limit 100;

使用ID查詢能極大的優化查詢速度,基本上能在幾十毫秒之內查出指定條件的資料。只是需要明確知道資料庫表ID情況,但是一般的資料庫表都會有ID,並且ID一般都會加索引,這為資料查詢帶來很大的便利。
上述方法還有一種變形:

select * from orders where is_del = 0 and id > #{id,jdbcType=BIGINT} limit 100;

==========

個人補充 :自增ID為主鍵,主鍵索引 ;

相關文章