VARCHAR 열을 축소 할 때 요점이 있습니까?


18

인터넷 검색VARCHAR2 은 Oracle 의 열 크기가 성능에 영향을 미치는지 여부가 혼합 된 보고서 인 것으로 보입니다 .

나는 VARCHAR크기 의 문제에 약간의 왜곡 을주고 싶습니다 .

주어 (다중) 자유 텍스트 필드 ( 하지 당신은 (오라클) 데이터베이스에 저장하려는 이름과 같은 짧은 물건), 임의의 지점 (WRT. 성능 또는 기타)에 존재 하지 밖으로 긁고 VARCHAR(용량 VARCHAR2(4000)오라클을)하지만 선택은 1024 또는 512와 같은 더 작은 값은 98 %의 경우에 충분할 것입니다.


답변:


12

특히 클라이언트 프로그램이 데이터 세트를 수신하기에 충분한 메모리를 할당해야하는 경우 메모리 사용량에 영향을줍니다.

많은 응용 프로그램 (특히 웹 응용 프로그램)은 멀티 바이트 문자 집합 인 UTF-8을 사용합니다. 따라서 바이트보다는 문자를 고려해야합니다.

천자를 넘길 것으로 기대한다면 CLOB을 적극적으로 고려할 것입니다. 평범한 텍스트를 저장할지 또는 비 유럽 언어로 사용하는 마크 업 (wiki / html?)을 저장할지에 대해 생각하고 있습니다. 예를 들어 여기의 질문 및 답변은 ​​CLOB이지만 주석은 VARCHAR에 적합 할 수 있습니다.

VARCHAR을 최대로 사용하면 6 개월 후에 누군가가 다시 크게 만들고 싶을 때 CLOB를 사용하지 않기 위해 자신을 걷어차 게됩니다.


2
UTF-8은 일반적으로 서양 언어의 경우 한 문자에 1 바이트를 사용합니다. 멀티 바이트 "이스케이프"시퀀스가 서양이 아닌 문자를 나타낼 수 있다는 점에서 멀티 바이트입니다.
Eric J.

9

중요한 문제 가 있지만 일반적으로 성능 고려 사항은 없습니다 . 에 대한 제한은 varchar다른 제약과 마찬가지로 제약으로 간주되어야합니다. 비즈니스 규칙을 시행해야합니다.

IMO에 대한 질문은 "이 필드에 저장된 자유 텍스트 데이터가 n 바이트 / 문자 보다 길지 않게 하려는 것 입니다."입니다. 이는 varchar(512)and 사이를 선택할 때 유일한 결정 요인 varchar(4000)입니다.

varcharSQL 유형 에 대해 이야기하고 있다고 가정합니다 . 상황이 다르고 pl/sql길이를 선택하는 것이 메모리 할당 이유로 중요 할 수 있습니다 .


감사. 나의 (매우 제한된) 경험이가는 한, "500-3999"사이의 한계를 나타내는 "비즈니스 규칙"은 임의적입니다. 즉, 누군가 숫자를 좋아했습니다. IMHO, 자유 텍스트를 사용하려고하고 구현 결과 (이 질문의 맥락)가 없으면 최대 값 (4000)이거나 자유 텍스트가 아닙니다. --- 내가이 의견에서 만들려고하는 요점 : btw를 선택하는 데 도움이되는 비즈니스 규칙이 없을 것이라고 생각합니다. 512 및 4000 ( "가능한 한 많은 문자"가 아닌 한)
Martin

그것이 "가능한 한 많은 문자"라면 @gary가 말한 것처럼, 당신은을 고려 clob하지 않아야합니까?
잭 더글러스

4

케이스의 98 %에 대해 더 작은 값이 작동하지만 케이스의 100 %에 대해 Varchar2 (4000)가 작동해야하는 경우 선택의 여지가 크지 않고 더 큰 값사용해야합니다 . 값의 2 %에 대해 별도의 테이블을 생성 한 다음 삽입 / 선택 등을 조정하면 필드를 확장하지 않아도 메모리 나 성능상의 이점이 없어지는 복잡성이 추가됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.