mybatis sql查詢條件有時間時查詢效率非常慢
阿新 • • 發佈:2018-11-12
最近在進行開發時發現一個奇葩的問題,sql在資料庫查詢速度不過1秒都不到在在後臺卻發現非常慢,通過列印dao方法時間和看mybatis log發現速度確實是很慢不是其他問題,然後一步步測試,首先加上<![CDATA[]]> 加在整個sql都沒用,然後加上<if></>判斷髮現時間快了點,但還是屬於慢,這裡發現很奇葩的問題,比如網上查詢時間段說什麼>,=要轉義,經過一步步測試我可以直接寫> ,不過<需要轉義成< 實踐才是那什麼真理的,通過列印sql執行時間明確了確實是執行速度慢而不是轉json或者其他環節慢,然後通過更換<![CDATA[]]>,還有< 等轉義字元發現問題依舊,然後通過寫死時間格式為2017-09-25 00:00:00,發現這樣速度跟資料庫查詢一致了,加上引數後就變慢了,這讓我確定問題是存在於mybatis底層,可惜我沒時間也沒能力研究底層,這問題只能將解決方法放在這裡,具體原因我會尋求mybatis社群發現這個問題,如果也有大神知道的話希望告訴我,將#換成$發現這問題才消失。真是很無語。
程式碼放下吧
<!-- 查詢部分sql --> <sql id="queryCriteria"> <if test="StartOperateTime != null"> and ta.OperateTime >= '${StartOperateTime}' </if> <if test="EndOperateTime != null"> and ta.OperateTime <= '${EndOperateTime}' </if> <if test="CompanyName != null"> and tv.DriverName like '%${TrsptDriverName}%' </if> </sql>
最後總結下問題:1:不能隨便信網上的東西xml中可以寫>, <需要轉義 2:mybatis原理需要探究下。