mybatis n+1問題


  mybatis的一對多或者多對多的時候,2中方式解決,一種是嵌套select,但是會有n+1問題,不推薦;另外一種是使用一條sql,在該sql里面使用子查詢的方式來完成。比如

select * from clazz m left join student mm on m.id = mm.clazz_id where m.id in (select t.id from clazz t limit 0, 10),但是這種方式有小問題,mysql的in這種子查詢不支持帶有limit的子查詢,也就是說上面紅色部分中帶有limit,並且在in子句中,會報錯:

[Err] 1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

解決該問題的是在子查詢外面在套一層,如下

select * from clazz m left join student mm on m.id = mm.clazz_id where m.id in (select id from (select t.id from clazz t limit 0, 10) as id),

這樣子就解決了n+1問題。

還有另外一種寫法也可以實現:

select * from (select * from teacher t limit 0, 2) tt left join clazz ttt on tt.id = ttt.teacher_id;


免責聲明!

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



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