MySQL in和limit不能連用的問題


  今天在mysql上處理一個數據量達到千萬級的數據庫表時,要取出滿足條件的數據集,然后存入到mongo數據庫,使用JPA提供的Pageble去拿分頁,再用多線程去取數據時,發現剛開始效率還可以,肯定比單線程強很多,但是這個Pageable有一個問題,在生成sql語句時,會自動加上一個limit *,10000,這樣的限制條件,“*”代表從哪一行開始取數據,10000代表本次操作取10000條數據。這種操作會嚴重占用服務器的緩存,如果你在執行這種操作,別人也在訪問時,會導致大家一起都卡得一比。

  解決方法就是用一個並發隊列來存儲每一頁的最后一條數據的id,但是我遇到了一個問題:

      This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery

  limit不能和IN這樣的只是范圍的關鍵字直接連用,錯誤的sql和改進后的sql。

//出錯的sql
select max(id) from news_info where id in (select id from news_info where where pub_date>?1 and id>?2 order by id limit 10000)

//正確的sql
select max(id) from news_info where id in (select id from (select id from news_info where pub_date>?1 and id>?2 order by id limit 10000) as news)

  既然不能直接連用,那就再中間創建一個臨時表咯。


免責聲明!

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



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