문제: SQL 서버(SQL Server) 데이터베이스에서 기본키가 VARCHAR 타입인 테이블의 특정 기본키 컬럼 값에 대한 데이터 조회 시 쿼리 속도가 느리다.
원인: 기본적으로 sendStringParametersAsUnicode 연결 속성이 true이다.
내용: SQL 서버는 연결 속성 중 sendStringParametersAsUnicode 속성이 true일 경우 문자열 파라미터를 유니코드 형식으로 서버에 보내며, false일 경우 유니코드가 아닌 ASCII/MBCS 형식으로 서버에 보낸다. SQL 서버는 기본적으로 sendStringParametersAsUnicode 속성이 true이므로 문자열 타입의 파라미터를 NVARCHAR로 보낸다. 이 경우 제공된 NVARCHAR 타입의 문자열 파라미터 값과 실제 VARCHAR 타입의 컬럼 값 사이에 암시적 타입 캐스팅(implicit type casting)이 일어나게 되며 해당 컬럼에 설정된 인덱스가 사용되지 않게 된다. 이는 애플리케이션 코드 상에서 바인딩 파라미터 값을 명시적으로 VARCHAR 타입으로 지정하는 경우에도 마찬가지이다.
문자열은 연속된 문자들이 그룹화되어 구성된 자료 구조이다. 따라서 데이터를 그룹화한 추상 자료형인 컬렉션(collection)의 다양한 자료 구조로 문자열을 구조화할 수 있으며 다양한 자료 구조 탐색 알고리즘을 사용하여 부분 문자열들을 탐색 및 비교하는 등의 문제를 해결할 수 있다.
백트래킹(backtracking)(또는 역추적) 알고리즘이란 최적의 해결책을 찾기 위해 모든 가능한 방법을 후보(candidate)로 구성한 후, 점진적으로 후보들을 시도하면서 유효한 후보가 아닐 경우(문제의 정답 조건을 만족하지 않을 경우) 문제 해결 과정에서 제외하고 되돌아가 ...
Comments