大數據量mybatis分頁插件page Helper效率問題


在開發過程中,我們少不了用到分頁,我最習慣的分頁是用limit來分頁。由於之前的時候寫的項目數據量並不大,所以用的是pageHelper這個插件來分頁的。以前也沒有什么感覺,近期做的項目數據量有點大,越來越感覺sql效率不夠,就看了一下它的基本工作原理。

當然,技術不到家,查看api什么的也看不太懂,就打印了一下最終執行的sql語句。對比之后發現是limit的偏移量問題導致的sql效率低下

寫的sql原本是這樣

select * from account where age >= 18;

 

最后執行的時候是這樣

select * fromselect * from account where age >= 18where limit 100,10;

 

也就是說,用pageHelper插件的時候,它會攔截我們寫的sql語句,自己重新包裝一層,在后面添加limit。這在數據量小的時候當然是沒有什么問題的,但是一旦數據量過大,那分頁到后面數據時候limti的偏移量必然增大 ,不可避免的,查詢的時間就會呈幾何倍數增長。

我們可以換一種分頁方式,緩解一下這種情況

子查詢的分頁方式:

SELECT * FROM account WHERE id >= 
(SELECT id FROM account WHERE age = 18 ORDER BY id LIMIT 10000, 1) LIMIT 10 

 



JOIN分頁方式

SELECT * FROM account a JOIN (select id from account limit 10000, 10) b ON a.ID = b.id

 


免責聲明!

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



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