关于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