작성
·
81
·
수정됨
0
안녕하세요. 큰돌님의 강의와 외부 자료등을 바탕으로 궁금한 점이 있어서 질문남깁니다.
MySQL InnoDB 기준으로 페이지는 16KB 레코드는 64KB로 알고 있는데요. (공식 문서를 보니 MySQL 5.7.6 이상부터는 페이지 크기를 32KB, 64KB로 변경이 가능하다고는 하네요)저장될 레코드가 64KB가 초과되면 컬럼을 선택해서 off-page가 되는것으로 이해하고 있었습니다.
하지만 최근 데이터베이스에 관한 공부를 진행하고 있습니다. 공부한 내용 중에 하나의 레코드 크기가 페이지 크기의 절반 이상일 경우 가변 길이 컬럼을 선택해서 off-page한다
라는 내용이 있었는데요, 위 내용에 따르면 크기가 큰 레코드를 조회할 때 여러 페이지를 참조해야하는 건 맞지만, 레코드가 페이지 크기를 초과하여 off-page를 하는 경우는 없지 않나요? 정확히 정립해야할 것 같아 질문 남깁니다.
궁금한 내용을 정리하다보니 더욱 혼동스러워 질문 퀄리티가 낮은 점 양해 부탁 드립니다.
감사합니다.
답변 1
0
안녕하세요 ㅎㅎ
제 강의 기반 질문은 아닌 것 같긴 한데요. ㅎㅎ
답변은 다음과 같습니다.
하나의 레코드 크기가 페이지 크기의 절반 이상일 경우 가변 길이 컬럼을 선택해서 off-page한다
라는 내용이 있었는데요
>> 네 맞습니다.레코드가 페이지 크기를 초과하는 경우, InnoDB는 해당 레코드를 off-page로 분리하여 저장하지는 않습니다. 대신 레코드의 크기가 페이지 크기의 절반 이상일 경우, 가변 길이 컬럼을 선택적으로 off-page로 저장합니다.
레코드가 페이지 크기를 초과하여 off-page를 하는 경우는 없지 않나요?
>>
있습니다. ㅎㅎ
가변 길이 컬럼인 BLOB 및 TEXT 컬럼은 기본적으로 768바이트까지는 페이지 내에 저장되고, 나머지 데이터는 별도의 페이지(off-page)에 저장됩니다. 이 경우, 메인 페이지에는 포인터가 저장되어 off-page에 있는 데이터를 참조합니다.
https://dev.mysql.com/doc/refman/8.0/en/innodb-row-format.html
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
이전에 습득(?)한 지식들과 연계해서 생각하다 보니 이런 질문이 나온 것 같습니다. 답변 감사드리며 실례를 끼쳐드렸다면 죄송합니다.