15.2 MyISAM 스토리지 엔진
MyISAM
은 오래된 (그리고 이미 사용할 수없는) ISAM
스토리지 엔진을 기반으로하지만, 많은 도움 확장 기능을 가지고 있습니다.
표 15.2 MyISAM
스토리지 엔진의 기능
스토리지 제한 | 256T 바이트 | 트랜잭션 | 아니오 | 잠금 입도 | 테이블 |
MVCC | 아니오 | 지리 공간 데이터 형식 지원 | 예 | 지리 공간 인덱스의 지원 | 예 |
B 트리 인덱스 | 예 | T 트리 인덱스 | 아니오 | 해시 인덱스 | 아니오 |
전체 검색 인덱싱 | 예 | 클러스터 된 인덱스 | 아니오 | 데이터 캐시 | 아니오 |
인덱스 캐시 | 예 | 압축 데이터 | 예 [a] | 암호화 데이터 [b] | 예 |
클러스터 데이터베이스 지원 | 아니오 | 복제 지원 [c] | 예 | 외래 키 지원 | 아니오 |
백업 / 시점 복구 [d] | 예 | 쿼리 캐시 지원 | 예 | 데이터 사전을위한 업데이트 통계 | 예 |
[a] 압축 된 MyISAM 테이블을 지원하는 압축 행 형식을 사용하는 경우뿐입니다. MyISAM에서 압축 행 형식을 사용하는 테이블은 읽기 전용입니다. [b] 스토리지 엔진 내부가 아닌 서버에서 (암호화 함수를 사용하여) 구현되어 있습니다. [c] 스토리지 엔진 내부가 아닌 서버에서 구현되어 있습니다. [d] 스토리지 엔진 내부가 아닌 서버에서 구현되어 있습니다. |
각 MyISAM
테이블은 디스크에 3 개의 파일로 저장됩니다. 파일 이름은 테이블 이름으로 시작하고 파일 유형을 나타내는 확장자가 붙습니다. .frm
파일은 테이블 포맷을 저장합니다. 데이터 파일에는 .MYD
( MYData
) 확장자가 붙습니다. 인덱스 파일에 .MYI
( MYIndex
) 확장자가 붙습니다.
MyISAM
테이블이 필요함을 명시 적으로 지정하려면 ENGINE
테이블 옵션으로 지정합니다.
CREATE TABLE t (i INT) ENGINE = MYISAM;
MySQL 5.6에서는 일반적으로 InnoDB
가 기본 엔진이기 때문에 ENGINE
을 사용하여 MyISAM
스토리지 엔진을 지정해야합니다.
mysqlcheck 클라이언트 또는 myisamchk 유틸리티 MyISAM
테이블을 체크하거나 수정할 수 있습니다. 공간을 절약하기 위해 myisampack를 사용하여 MyISAM
테이블을 압축 할 수 있습니다. 섹션 4.5.3 "mysqlcheck - 테이블 관리 프로그램」 , 섹션 4.6.3 "myisamchk - MyISAM 테이블 유지 보수 유틸리티」 , 섹션 4.6.5 "myisampack - 압축 된 읽기 전용 MyISAM 테이블 생성" 을 참조하십시오.
MyISAM
테이블에는 다음과 같은 특징이 있습니다.
모든 데이터 값은 하위 바이트부터 저장됩니다. 그러면 데이터 시스템과 운영 시스템 의존하지 않습니다. 바이너리 이식성을위한 유일한 요구 사항은 2의 보수 부호있는 정수 및 IEEE 부동 소수점 형식을 사용하는 것입니다. 이러한 요구 사항은 주류의 시스템에서 폭넓게 사용되고 있습니다. 바이너리 이식성은 임베디드 시스템에 적용되지 않을 수 있습니다. 특별한 프로세서를 사용하는 경우가 있기 때문입니다.
하위 바이트부터 데이터를 저장하는 데 큰 속도 저하는 없습니다. 일반적으로 테이블 행의 바이트 정렬하지 않고 순차적으로 미 정렬 바이트를 읽어 들이기 처리는 반대 순서로로드 처리 시간이 더 걸리지 않습니다. 또한 컬럼 값을 가져올 서버의 코드는 다른 코드에 비해 속도가 중시되지 않습니다.
인덱스를 효율적으로 압축 할 수 있기 때문에 모든 숫자 키 값은 상위 바이트부터 저장됩니다.
큰 파일 (최대 63 비트 파일 길이)은 큰 파일을 지원하는 파일 시스템과 운영 체제에서 지원됩니다.
MyISAM
테이블의 행 수는 (2 32) 2 (1.844E + 19)의 제한이 있습니다.하나의
MyISAM
테이블의 최대 인덱스 수는 64입니다.1 개의 인덱스의 최대 컬럼 수는 16입니다.
최대 키 길이는 1000 바이트입니다. 이것은 소스를 수정하고 다시 컴파일해서 바꿀 수 있습니다. 키가 250 바이트보다 큰 경우 키의 블록 크기는 기본값 1024 바이트보다 큰 값이 사용됩니다.
정렬 된 순서로 행이 삽입 된 경우 (
AUTO_INCREMENT
컬럼을 사용했을 때와 마찬가지로) 상위 노드가 하나의 키만을 포함하는 인덱스 트리가 분할됩니다. 따라서 인덱스 트리의 영역 이용률이 향상됩니다.테이블 당 하나의
AUTO_INCREMENT
컬럼의 내부 처리가 지원됩니다.MyISAM
은INSERT
조작 및UPDATE
작업이 컬럼을 자동으로 업데이트합니다. 이렇게하면AUTO_INCREMENT
컬럼은 빨라집니다 (적어도 10 %). 시퀀스의 상단 값은 제거되면 다시 사용할 수 없습니다. (AUTO_INCREMENT
컬럼이 다중 컬럼 인덱스의 마지막 컬럼으로 정의 된 경우 시퀀스의 상단에서 제거 된 값이 재사용됩니다.)AUTO_INCREMENT
값은ALTER TABLE
또는 myisamchk로 설정할 수 있습니다.동적 크기의 행 삭제를 갱신 및 삽입과 함께 사용하면 분할이 상당히 감소합니다. 이것은 삭제 된 인접 블록을 자동으로 결합하여 다음의 블록이 삭제 된 경우 블록을 확장하는 것으로 이루어집니다.
MyISAM
은 동시 삽입을 지원하고 있습니다. 테이블의 데이터 파일 중간에 빈 블록이 없으면 다른 스레드가 테이블에서 읽을 것과 동시에 새로운 행을 거기에INSERT
할 수 있습니다. 행을 삭제 한 결과로 또는 동적 길이의 행을 현재의 내용보다 많은 데이터로 업데이트 한 결과로 여유 블록이 발생할 수 있습니다. 모든 빈 블록이 완전히 사용되면 (채워지면) 이후의 삽입은 다시 병렬됩니다. 섹션 8.10.3 "동시 삽입" 을 참조하십시오.데이터 파일과 인덱스 파일을 다른 물리적 장치에서 다른 디렉토리에두고
DATA DIRECTORY
및INDEX DIRECTORY
테이블 옵션을CREATE TABLE
에 붙여 속도를 높일 수 있습니다. 섹션 13.1.17 "CREATE TABLE 구문" 을 참조하십시오.BLOB
와TEXT
컬럼 인덱스를 붙일 수 있습니다.인덱싱 된 열이
NULL
값이 허용됩니다. 여기에는 키 당 0 - 1 바이트가 필요합니다.문자 컬럼마다 다른 문자 집합을 가질 수 있습니다. 섹션 10.1 "문자 집합 지원" 을 참조하십시오.
MyISAM
인덱스 파일에 표가 제대로 닫혔는지 여부를 나타내는 플래그가 있습니다. mysqld가--myisam-recover-options
옵션으로 시작되면,MyISAM
테이블은 언제 열린 여부를 자동으로 확인하고 제대로 닫혀 있지 않은 경우 복구됩니다.myisamchk는
--update-state
옵션을 사용하여 실행 여부를 테이블에 표시합니다. myisamchk --fast는이 마크가없는 테이블 만 확인합니다.myisamchk --analyze는 키 전체에 대해하는 것과 마찬가지로, 키 부분에 대한 통계 데이터를 저장합니다.
myisampack는
BLOB
및VARCHAR
컬럼을 압축 할 수 있습니다.
MyISAM
은 다음과 같은 기능도 지원하고 있습니다.
진정한
VARCHAR
형을 지원하고 있습니다.VARCHAR
컬럼은 1 바이트 또는 2 바이트로 저장되는 길이 시작됩니다.VARCHAR
컬럼을 가진 테이블의 행의 길이는 고정 또는 동적 일 수 있습니다.테이블에
VARCHAR
와CHAR
컬럼의 총 길이는 최대 64K 바이트 될 수 있습니다.임의의 길이의
UNIQUE
제약.
추가 리소스
MyISAM
스토리지 엔진에 특화된 포럼은 http://forums.mysql.com/list.php?21 에서 볼 수 있습니다.