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

原文地址:https://www.cnblogs.com/wangzhening6/p/13953643.html