情形:
在一次調試中,發現了一個bug,就是有三個大數據量的表進行關聯查詢後分頁,一個表60萬,一個表40萬,一個表20萬,發現前端50頁查詢速度很快,但是當查詢到5000頁的時候,特別慢,需要兩分鐘。
素材:
- 語言:java
- sql框架:mybatis
- 數據庫:sql server
sql分頁語句:
offset #{offset} row fetch next #{pageSize} row only
解決:
- 將#{offset}和#{page}換成
offset 49900 row fetch next 10 row only
- 測試,發現執行速度很快,大約需要20ms,果斷替換爲
offset ${offset} row fetch next ${pageSize} row only
注意:爲了防止sql注入,需要其進行嚴格的校驗。
原因:
猜測是mybatis對於sql自主的優化出現的問題,可能是一個不好的優化,並未去看源碼,等待有時間再研究。