길이가 큰 VARCHAR2 열 정의의 영향
을 다을사용열정어있효까니로 정의하면 어떤 효과가 있습니까?VARCHAR2(1000)
에 VARCHAR2(10)
Oracle에서 값이 10바이트 이하인 경우
열에 값을 저장하는 데 필요한 공간만 사용합니까? 아니면 테이블스페이스/인덱스의 크기/성능에 부정적인 영향을 미칩니까?
대답은 데이터베이스 테이블의 열을 말하는 것인지 아니면 PL/SQL 프로그램의 변수를 말하는 것인지에 따라 달라집니다.
데이터베이스 열
사용되는 스토리지의 양은 저장된 데이터의 크기에 비례합니다.
PL/SQL 변수
변수의 크기가 1~4000(11g+)/1999(10g 이하)로 선언되면 최대 길이에 대해 메모리가 할당됩니다(즉, VARCHAR2(100)에는 최소 100바이트의 메모리가 필요함).
변수의 크기가 4001(11g+)/2000(10g 이전) 이상으로 선언되면 저장된 데이터의 크기에 따라 메모리가 할당됩니다.(흥미로운 부수적인 질문은 변수의 값이 변경되면 메모리 크기가 어떻게 조정되는가 하는 것입니다. - 새로운 크기를 가진 다른 버퍼를 재할당합니까?)
작은 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
'IT' 카테고리의 다른 글
Firebase의 다중 where 절을 기준으로 쿼리 (0) | 2023.06.07 |
---|---|
여러 CSV 파일을 단일 xls 워크북 Python 3에 결합 (0) | 2023.06.07 |
피벗 테이블 목록의 오래된 항목 (0) | 2023.06.07 |
VBA 코드 실행을 중지하는 방법은 무엇입니까? (0) | 2023.06.07 |
"변환 처리기 외부의 vuex 저장소 상태를 변환하지 않음"의 .pushends (0) | 2023.06.07 |