比如:查询会员列表的话,where后面带很多个if test条件是不是会影响效率,还是重写个sql,但是如果每个条件查询都重写sql,sql又太多了,显得很乱。该怎么选择?
认证高级PHP讲师
效率不會影響多少,畢竟都是一些內存操作,Mybatis动态SQL一个最大的问题就是IF...TEST太多的话,后期维护会很累,因为一个SQL调用方很很多,到时候找组合会很麻烦,SQL调优会很吃力,所以尽量每个查询都写一个(分页除外),如果实在需要IF...TEST,建議不能太多
Mybatis
SQL
IF...TEST
套著寫if判斷不會太慢吧,實在不行用視圖唄
一定有快取的,應該不會太影響效率。 另外,有N個條件,那麼對應的條件組合就有2^N個,你要寫多少不同的sql呢?
1、where後面帶很多個if test條件的情況在查詢功能裡很常見,十多二十個查詢條件也很見慣; 2、MyBatis既然提供if test標籤功能,肯定是有優化過得,比起你寫多個SQL再透過Java程式碼判斷分流,肯定效率高很多; 3、執行速度影響的大塊是資料庫伺服器的硬體配置和資料庫平台,作為普通程式設計師,還不需要考慮那麼多,實在擔心這個問題,也可以將自己的程式碼放在測試環境進行壓力測試;4、相比查詢條件的變化,查詢結果列的變化更影響效率,因為需要手動關閉快取remapResults
<select id="verificationCode_select" parameterClass="String" resultClass="HashMap" remapResults="true">$sql$</select>
綜上所述,不管行不行,先把程式碼和SQL寫出來測試再說吧!
效率不會影響多少,畢竟都是一些內存操作,
Mybatis
动态SQL
一个最大的问题就是IF...TEST
太多的话,后期维护会很累,因为一个SQL
调用方很很多,到时候找组合会很麻烦,SQL调优会很吃力,所以尽量每个查询都写一个(分页除外),如果实在需要IF...TEST
,建議不能太多套著寫if判斷不會太慢吧,實在不行用視圖唄
一定有快取的,應該不會太影響效率。
另外,有N個條件,那麼對應的條件組合就有2^N個,你要寫多少不同的sql呢?
1、where後面帶很多個if test條件的情況在查詢功能裡很常見,十多二十個查詢條件也很見慣;
2、MyBatis既然提供if test標籤功能,肯定是有優化過得,比起你寫多個SQL再透過Java程式碼判斷分流,肯定效率高很多;
3、執行速度影響的大塊是資料庫伺服器的硬體配置和資料庫平台,作為普通程式設計師,還不需要考慮那麼多,實在擔心這個問題,也可以將自己的程式碼放在測試環境進行壓力測試;
4、相比查詢條件的變化,查詢結果列的變化更影響效率,因為需要手動關閉快取remapResults
綜上所述,不管行不行,先把程式碼和SQL寫出來測試再說吧!