2009-04-21 3 views
1

VARCHAR2 (1 BYTE)를 사용하는 것이 CHAR (1 BYTE)를 사용하는 것보다 효율적이지 않습니까?Oracle 문자 유형

CHAR (1 BYTE)보다 VARCHAR2 (2000 BYTE)를 사용하는 것이 효율적입니까? 필드에 한 문자 이상 넣지 않으면 어떻게됩니까?

** 효율적으로, 나는 시간 (검색)과 공간 (저장) 모두에서 효율적이었다.

+1

효율적인 점은 무엇입니까? 저장? – cagcowboy

+0

나는 시간 (검색)과 저장이라는 측면에서 효율적이었다. – Steven

답변

5

문자 집합에 따라 CHAR (1 바이트)가 특정 문자를 저장할 수 없기 때문에 다중 문자 문자에 대해 이야기 할 경우 VARCHAR2 (2000 바이트)와 CHAR (1 바이트) 사이에 차이가있을 수 있습니다. 바이트 문자.

일반적으로 1 바이트의 데이터 만 저장하는 경우 VARCHAR2 (2000 바이트)는 CHAR (1 바이트)보다 많은 스토리지를 소비하지 않습니다 (PL/SQL 규칙은 약간 다릅니다) ("효율적인"은 주로 스토리지 효율성으로 해석됩니다.) VARCHAR2 (2000 BYTE)는 클라이언트 응용 프로그램이 실제 데이터 크기를 미리 알지 못하기 때문에 클라이언트 응용 프로그램이 필드의 내용을 보유하기 위해 2000 바이트 버퍼를 자주 할당하게하므로 클라이언트 응용 프로그램에서 과도하게 사용할 수 있습니다 RAM의 양. 하지만 실제로 문제가 될 수도 있고 그렇지 않을 수도 있습니다. 대부분의 클라이언트 응용 프로그램은 RAM을 손상시키지 않으며 대부분의 결과 집합은 클라이언트에 수백만 행을 반환하지 않으므로 몇 백 개의 행에 몇 k를 낭비하는 것은 큰 문제가되지 않을 수 있습니다.

자세한 내용은 특히 PL/SQL 규칙과 관련하여 AskTom thread이 있습니다.

+0

VARCHAR2 항목의 길이는 어떻게 저장됩니까? 문자열이 null로 종료 되었습니까 (C와 유사) 또는 길이 값이 있습니까? 이 길이 결정으로 효율성이 떨어 집니까? – Steven

+1

CHAR 및 VARCHAR2 열은 모두 블록 헤더에 길이 속성이 있습니다. 그래서 우리가 VARCHAR2 (2000) 또는 CHAR (1)에 대해 이야기하든간에 길이 필드에 2 바이트의 저장 영역을 추가합니다. –