2010-12-17 4 views
4

'ID'라는 색인 된 varchar2 열이있는 Oracle 테이블을 만들었습니다. 내가 사용
소프트웨어는 몇 가지를하는 원인이되는오라클 : 'N'기능을 사용하는 쿼리 - 어떤 데이터 형식을 사용해야합니까?

select * from table_name where ID=N'something' 

(값 앞에 여분의 "N"알) 대신

select * from table_name where ID='something' 

는 않습니다 같은 쿼리를 실행,이 테이블을 읽고 문자 변환의 종류.
첫 번째 쿼리가 범위 스캔을 수행하는 동안 두 번째 쿼리는 전체 테이블 스캔을 수행합니다.

이 소프트웨어가 실행중인 쿼리를 수정할 수 없으므로 'N'함수에 의해 수행되는 변환이 전체 테이블 스캔을 의미하지 않도록 varchar2 대신 어떤 데이터 형식을 사용해야합니까?

답변

12

문자열 앞의 접두사 N을 사용하여 NVARCHAR2 또는 NCHAR 데이터 유형을 지정합니다.

NVARCHAR2를 VARCHAR2와 비교할 때 Oracle은 VARCHAR2 변수를 NVARCHAR2로 변환합니다. 이것이 전체 스캔이 발생한 이유입니다.

쿼리를 수정할 수없는 경우 테이블의 VARCHAR2 대신 NVARCHAR2 열을 사용하십시오.

+0

답변 해 주셔서 감사합니다. –

관련 문제