關於mybatis轉義SQL動態執行語句變慢的原因


mybatis轉義執行sql查詢語句,如果方式為“exec sp_executesql N'SELECT....@P17 nvarchar(4000)”。

主要為數據庫定義的參數類型與轉換后的nvarchar(4000)不同,導致查詢走的索引查詢異常。

結果要對輸入的參數做些改變,java下的方式如下:

最后發現是使用 #{xxx} 去注入參數時查詢很慢,在使用${xxx}查詢幾乎和plsq中查詢時間時一樣的。

更改前:

更改后

具體原因需以后了解mybatis的底層。

 轉義到SQL數據庫執行的結果,就是exec sp_executesql N'SELECT top 1* from A where b=1 ' 和exec sp_executesql N'SELECT top 1* from A where b=@name',N'@P0 nvarchar(4000),N'6' 大概這樣的區別了。

 

參考1:https://www.pianshen.com/article/1070940709/

參考2:https://www.cnblogs.com/zyh1989/p/11563231.html

 


免責聲明!

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



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