我的程序代码如下。sqlserver2008数据库,表T_USER.USERNAME 类型为varchar(50)。用sqlserver 的profiler工具查看到
sqlserver实际接受到的username的参数值为 N'kk'.USERNAME为主键,由于传入参数类型为nvarchar而实际字段类型类型为varchar,导致对全表的scan,而非seek。 业务忙时为照成死锁问题。
有没有好的解决方法。将字段类型修改成nvarchar不算。
sqlserver实际接受到的username的参数值为 N'kk'.USERNAME为主键,由于传入参数类型为nvarchar而实际字段类型类型为varchar,导致对全表的scan,而非seek。 业务忙时为照成死锁问题。
有没有好的解决方法。将字段类型修改成nvarchar不算。
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection(
"jdbc:sqlserver://oradb:1433;DatabaseName=MYDB;", "sa",
"sa123456");
PreparedStatement ps = con
.prepareStatement("select * from T_USER where USERNAME=?");
ps.setString(1, "kk");
ResultSet rs = ps.executeQuery();
} catch (Exception ex) {
ex.printStackTrace();
}
SQLServer类型不匹配问题
本文探讨了SQLServer2008中因参数类型不匹配导致全表扫描的问题。具体表现为varchar字段接收nvarchar参数,引发性能瓶颈及死锁。文章提供了示例代码,并寻求解决方案。
547

被折叠的 条评论
为什么被折叠?



