레이블이 MYD인 게시물을 표시합니다. 모든 게시물 표시
레이블이 MYD인 게시물을 표시합니다. 모든 게시물 표시

2009년 3월 10일 화요일

각 타입의 크기( MYD )

MYD파일 각 타입에 필요한 크기는 다음과 같다. 
----------------------------------
TINYINT 1
SMALLINT 2
MEDIUMINT 3
INT 4
BIGINT 8
FLOAT 4
DOUBLE PRECISION 8
DECIMAL 6~30
----------------------------------
DATE 3
DATETIME 8
TIME 3
TIMESTAMP 4
----------------------------------
SET 1~8
ENUM 1~2
----------------------------------
TINYBLOB 1+값의 크기
BLOB 2+값의 크기
LONGBLOG 4+값의 크기
----------------------------------


2009년 3월 9일 월요일

가변크기일 경우의 MYD

가변 크기일 경우의 레코드 헤더는 다음과 같다. 
  • 헤더 시작마크(0x3000)
  • actual  length
  • unused length
  • flags + overflow pointer
actual length는  전 칼럼의 합계 바이트 수이다. 
unused length는  자신의 레코드 끝에서부터 다음의 레코드의 처음까지의 사이에 있는 미사용부분 바이트 수이다.  여기에 0x00이 채워져있다. 
actual length+unused length는 16진수로 자르기 좋은 수로 최소 16(10진수)가 된다. 

overflow pointer는 레코드가 연속되지 않는 여러 부분에 기록되어 있는 경우에 나머지가 기록되어 있는 위치를 나타낸다. 

헤더의 다음에는  각 컬럼의 값이 계속된다.  varchar()의 경우에는 값의 바이트수가 추가되고 그 뒤에 실제의 값이 들어가게 된다. 

MYD
mysql> create table dynamic(a varchar(3), b varchar(5) ) default charset=eucjpms;
mysql> insert into dynamic values( 'abc', 'def'),('ghi',NULL);

shell# hexdump -C dynamic.MYD
1레코드: 03 00 09 07 fc 03 62 62 63  03 64 65 66 00 00 00 00 00 00 00 
2레코드: 03 00 06 0a fe 03 67 68 69  00 00 00 00 00 00 00 00 00 00 00 





2009년 3월 2일 월요일

MYD의 압축,포맷

MyISAM의 MYD파일을 myisampack명령어로 압축할 수 있다. 압축후에는 원래크기의 50%~70%정도의 크기로 된다. 
압축한 파일에 대해서는 쓰기가 되지 않는다. 

압축예
shell# myisampack -v table1 
shell# myisamchk -rq table1

압축후에는 myisamchk를 실행해야 한다. 
압축를 풀 때에는 「myisamchk -r  --unpack 테이블」을 사용한다. 

MYD에는 다음의 3종류가 있다. 
  • fixed(고정크기)
  • dynamic(가변크기)
  • packed(압축)
테이블에 varchar(), text, blob형을 정의하면 가변크기가 된다. myisampack으로 MYD를 압축해서  읽기 전용 테이블로 만들면 packed로 된다. 



2008년 12월 4일 목요일

MySQL기본구조3

파일의 배치
MySQL서버등의 명령어를 인스톨한 곳을 「basedir」, MySQL데이터를 저장하는 곳을 「datadir」라고 부른다.  basedir, datadir 둘다 MySQL서버 옵션으로 존재하고 변경가능하다. 

MySQL서버가 사용하는 파일은 다음과 같다. 
  [basedir] -----
                      + share/mysql/charsets/
                      + share/mysql/english/
  [datadir] -----
                      +mysql/

[datadir]/mysql/은 권한테이블이 저장되어있는 중요한 디렉토리이다. 이 디렉토리 아래에 결정된 파일이 없으면 서버는 기동되지 않는다. 
[datadir]/ 이하는 작성된 디렉토리는 서버가 「데이터베이스」라고 인식한다. 
예를 들어 「test」라는 데이터베이스가 존재한다고 하면 즉 [datadir]/test/ 디렉토리가 존재하는 것을 말한다. 

예를 들어 「test」데이터베이스에 「a」라는 테이블을 작성하면 [datadir]/test/a.frm파일이 작성된다.  frm파일은  테이블정의가 기록되는 파일이다. 
데이터와 인덱스등은 MyISAM, InnoDB, NDB라는 스토리지엔진의 차이에 따라 작성하는 룰도 달라진다. 

사용되는 빈도가 높은 MyISAM의 경우에 [datadir]/test/a.MYD, [datadir]/test/a.MYI파일이 작성된다. 

「mysql」데이터베이스 아래의 권한테이블은 MyISAM이지 않으면 않된다.