论坛首页 Java企业应用论坛

sqlserver 中的nvarchar 和varchar 导致的全表搜索及死锁问题。

浏览 1608 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-05   最后修改:2011-12-05
我的程序代码如下。sqlserver2008数据库,表T_USER.USERNAME 类型为varchar(50)。用sqlserver 的profiler工具查看到

sqlserver实际接受到的username的参数值为  N'kk'.
USERNAME为主键,由于传入参数类型为nvarchar而实际字段类型类型为varchar,导致对全表的scan,而非seek。  业务忙时为照成死锁问题。(用hibernate实现下面的代码碰到了同样的问题。)
有没有好的解决方法。将字段类型修改成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();
		}
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics