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