[자바/스프링] JDBC 이슈 해결

  • 문제: SQL 서버(SQL Server) 데이터베이스에서 기본키가 VARCHAR 타입인 테이블의 특정 기본키 컬럼 값에 대한 데이터 조회 시 쿼리 속도가 느리다.
  • 원인: 기본적으로 sendStringParametersAsUnicode 연결 속성이 true이다.
  • 내용: SQL 서버는 연결 속성 중 sendStringParametersAsUnicode 속성이 true일 경우 문자열 파라미터를 유니코드 형식으로 서버에 보내며, false일 경우 유니코드가 아닌 ASCII/MBCS 형식으로 서버에 보낸다. SQL 서버는 기본적으로 sendStringParametersAsUnicode 속성이 true이므로 문자열 타입의 파라미터를 NVARCHAR로 보낸다. 이 경우 제공된 NVARCHAR 타입의 문자열 파라미터 값과 실제 VARCHAR 타입의 컬럼 값 사이에 암시적 타입 캐스팅(implicit type casting)이 일어나게 되며 해당 컬럼에 설정된 인덱스가 사용되지 않게 된다. 이는 애플리케이션 코드 상에서 바인딩 파라미터 값을 명시적으로 VARCHAR 타입으로 지정하는 경우에도 마찬가지이다.
  • 해결: sendStringParametersAsUnicode 속성을 false로 설정한다.
  • 참고

Comments