열이 name varchar(20)
인 테이블이 있고 name = "abcdef"인 행을 저장한다고 가정합니다.어떻게 varchar2를 비효율적으로 만들지 않습니까?
INSERT INTO tab(id, name) values(12, 'abcdef');
방법 name
에 대한 메모리 할당이 경우 수행 ?
은 내가 생각할 수있는 두 가지 방법이 있습니다 :
A)
20 바이트가 할당 만 6가 사용된다. 이 경우 varchar2
은 메모리 할당과 관련하여 char
보다 큰 이점이 없습니다.
b)
단지 6 바이트가 할당된다. 이 경우, 나는이 일 후에
INSERT INTO tab(id, name) values(13, 'yyyy');
INSERT INTO tab(id, name) values(14, 'zzzz');
을 더 행의 몇 가지를 CH3OH 후 나는 UPDATE를 할 경우,
UPDATE tab SET name = 'abcdefghijkl' WHERE id = 12;
는 어디 DBMS는 필요한 추가 6 바이트를 얻을 않습니다 에서? 다음 6 바이트가 비어 있지 않은 경우가있을 수 있습니다 (처음에는 6 개만 할당되고 다른 바이트는 다음 바이트가 할당되었을 수 있습니다).
행을 새로운 장소로 이동하는 것 외에 다른 방법이 있습니까? 인덱스 구성 테이블의 경우에는 시프 팅 (shift)조차도 문제가 될 수 있습니다 (힙 (heap) 구성 테이블의 경우에는 괜찮을 수 있음).
이것은 구현에 따라 다르지만 업데이트 할 때 새 행은 이전 행과 전혀 다른 위치에 작성됩니다. 이것은 varchar가 없어도 사실입니다. – hobbs