IT

길이가 큰 VARCHAR2 열 정의의 영향

itgroup 2023. 6. 7. 22:31
반응형

길이가 큰 VARCHAR2 열 정의의 영향

을 다을사용열정어있효까니로 정의하면 어떤 효과가 있습니까?VARCHAR2(1000)VARCHAR2(10)Oracle에서 값이 10바이트 이하인 경우

열에 값을 저장하는 데 필요한 공간만 사용합니까? 아니면 테이블스페이스/인덱스의 크기/성능에 부정적인 영향을 미칩니까?

대답은 데이터베이스 테이블의 열을 말하는 것인지 아니면 PL/SQL 프로그램의 변수를 말하는 것인지에 따라 달라집니다.

데이터베이스 열

사용되는 스토리지의 양은 저장된 데이터의 크기에 비례합니다.

PL/SQL 변수

변수의 크기가 1~4000(11g+)/1999(10g 이하)로 선언되면 최대 길이에 대해 메모리가 할당됩니다(즉, VARCHAR2(100)에는 최소 100바이트의 메모리가 필요함).

변수의 크기가 4001(11g+)/2000(10g 이전) 이상으로 선언되면 저장된 데이터의 크기에 따라 메모리가 할당됩니다.(흥미로운 부수적인 질문은 변수의 값이 변경되면 메모리 크기가 어떻게 조정되는가 하는 것입니다. - 새로운 크기를 가진 다른 버퍼를 재할당합니까?)

10g에 대한 참조: PL/SQL 데이터 유형

작은 VARCHAR2 변수는 성능에 최적화되고 큰 변수는 효율적인 메모리 사용에 최적화됩니다.컷오프 지점은 2000바이트입니다.VARCHAR2가 2000바이트 이상인 경우 PL/SQL은 실제 값을 저장할 수 있는 충분한 메모리만 동적으로 할당합니다.VARCHAR2 변수가 2000바이트보다 짧은 경우 PL/SQL은 변수의 전체 선언 길이를 미리 할당합니다.예를 들어 VARCHAR2(2000 BYTE) 변수와 VARCHAR2(1999 BYTE) 변수에 동일한 500바이트 값을 할당하면 전자가 500바이트를 차지하고 후자가 1999바이트를 차지합니다.

11g에 대한 참조: PL/SQL 코드에서 메모리 오버헤드 방지

VARCHAR2 변수의 크기를 4000자 이상으로 지정합니다. PL/SQL은 변수를 할당할 때까지 기다린 다음 필요한 만큼의 스토리지만 할당합니다.

데이터베이스에는 차이가 없습니다. VARCHAR2가변 길이로 저장되며, 선언된 길이는 제한에 불과합니다.

일부 프로그램은 합니다.1000대신 열당 바이트 수10열이 다음과 같이 정의된 경우VARCHAR2(1000)

열 크기를 처리할 준비가 된 최대 길이로 정의합니다.데이터베이스에 파일을 로드하는 준비 테이블의 경우 VARCHAR2(4000)를 사용할 수 있습니다.그런 다음 모든 데이터가 데이터베이스에 저장되면 필요한 모든 검증(데이터 유형, 데이터 길이, 최소/최대 값, 허용 가능한 문자 등)을 수행하고 올바른 값을 적절한 정의/제약 조건을 가진 열에 전달할 수 있습니다.

DML 오류 로깅을 활용하여 정의/제약 조건에 맞지 않는 데이터를 까다로운 행별 코딩 없이 거부 테이블로 펌핑할 수 있습니다.

만약 당신이 VARCHAR2(1000)를 가지고 있다면, 당신은 어느 시점에서 당신이 예상하는 것보다 더 긴 데이터를 그곳에 넣을 것입니다 (예를 들어, 당신은 10자의 문자열을 얻을 수 있지만, 일부 문자는 멀티바이트 문자 집합 값이기 때문에 14바이트).

언급URL : https://stackoverflow.com/questions/1882073/impact-of-defining-varchar2-column-with-greater-length

반응형