Loading...
MySQL 9.5 Reference Manual 9.5의 18.2 The MyISAM Storage Engine의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
18.2.1 MyISAM Startup Options 18.2.2 Space Needed for Keys 18.2.3 MyISAM Table Storage Formats 18.2.4 MyISAM Table Problems
MyISAM은 이전의 (더 이상 사용 불가한) ISAM 스토리지 엔진을 기반으로 하지만, 많은 유용한 확장이 추가되어 있습니다.
Table 18.2 MyISAM Storage Engine Features
| Feature | Support |
|---|---|
| B-tree indexes | Yes |
| Backup/point-in-time recovery (Implemented in the server, rather than in the storage engine.) | Yes |
| Cluster database support | No |
| Clustered indexes | No |
| Compressed data | Yes (Compressed MyISAM tables are supported only when using the compressed row format. Tables using the compressed row format with MyISAM are read only.) |
| Data caches | No |
| Encrypted data | Yes (Implemented in the server via encryption functions.) |
| Foreign key support | No |
| Full-text search indexes | Yes |
| Geospatial data type support | Yes |
| Geospatial indexing support | Yes |
| Hash indexes | No |
| Index caches | Yes |
| Locking granularity | Table |
| MVCC | No |
| Replication support (Implemented in the server, rather than in the storage engine.) | Yes |
| Storage limits | 256TB |
| T-tree indexes | No |
| Transactions | No |
| Update statistics for data dictionary | Yes |
각 MyISAM 테이블은 디스크의 두 개 파일에 저장됩니다.
이 파일들은 테이블 이름으로 시작하는 이름을 가지며, 파일 타입을 나타내는 확장자를 가집니다.
데이터 파일은 .MYD (MYData) 확장자를 가집니다.
인덱스 파일은 .MYI (MYIndex) 확장자를 가집니다.
테이블 정의는 MySQL 데이터 딕셔너리에 저장됩니다.
명시적으로 MyISAM 테이블을 사용하겠다고 지정하려면, ENGINE 테이블 옵션으로 이를 나타냅니다:
1CREATE TABLE t (i INT) ENGINE = MYISAM;
MySQL 9.5에서는, 기본 엔진이 InnoDB이기 때문에, MyISAM 스토리지 엔진을 사용하려면 보통 ENGINE을 사용하여 지정해야 합니다.
MyISAM 테이블은
mysqlcheck 클라이언트 또는 myisamchk
유틸리티로 체크하거나 복구할 수 있습니다.
또한
myisampack을 사용하여 MyISAM 테이블을 압축해 훨씬 적은 공간을 차지하도록 만들 수 있습니다.
자세한 내용은
Section 6.5.3, “mysqlcheck — A Table Maintenance Program”, Section 6.6.4, “myisamchk — MyISAM Table-Maintenance Utility”, 그리고
Section 6.6.6, “myisampack — Generate Compressed, Read-Only MyISAM Tables”을 참조하십시오.
MySQL 9.5에서, MyISAM 스토리지 엔진은 파티셔닝을 지원하지 않습니다.
이전 버전의
MySQL에서 생성된 partitioned
MyISAM table은 MySQL 9.5에서 사용할 수 없습니다.
더 자세한 정보는
Section 26.6.2, “Partitioning Limitations Relating to Storage Engines”를 참조하십시오.
이러한 테이블을 MySQL 9.5에서 사용할 수 있도록 업그레이드하는 데 대한 도움말은
Section 3.5, “Changes in MySQL 9.5”를 참조하십시오.
MyISAM 테이블은 다음과 같은 특징을 가집니다:
모든 데이터 값은 low 바이트를 먼저 저장합니다. 이는 데이터를 머신 및 운영 체제에 독립적으로 만들어 줍니다. 바이너리 이식성을 위해 필요한 것은 머신이 2진 보수 부호 있는 정수(two's-complement signed integers)와 IEEE 부동소수점 포맷을 사용해야 한다는 점뿐입니다. 이 요구 사항은 주류 머신들 간에 널리 사용됩니다. 바이너리 호환성은 특이한 프로세서를 사용하는 임베디드 시스템에는 적용되지 않을 수 있습니다.
low 바이트를 먼저 저장한다고 해서 속도에 큰 페널티가 발생하지는 않습니다. 테이블 로우의 바이트들은 일반적으로 정렬되어 있지(unaligned) 않으며, unaligned 바이트를 정방향 순서로 읽는 것과 역순으로 읽는 것 사이에는 처리량 차이가 거의 없습니다. 또한 컬럼 값을 가져오는 서버 내부 코드는, 다른 코드에 비해 시간이 중요한(critical) 부분이 아닙니다.
더 나은 인덱스 압축을 허용하기 위해, 모든 숫자 키 값은 high 바이트를 먼저 저장합니다.
대용량 파일을 지원하는 파일 시스템과 운영 체제에서는 대용량 파일(최대 63비트 파일 길이)도 지원됩니다.
MyISAM 테이블의 로우 수는 (232)2 (1.844E+19)개로 제한됩니다.
MyISAM 테이블당 최대 인덱스 개수는 64개입니다.
인덱스당 최대 컬럼 개수는 16개입니다.
최대 키 길이는 1000 바이트입니다. 이는 소스를 변경하고 재컴파일함으로써 변경할 수도 있습니다. 키가 250 바이트보다 긴 경우, 기본값인 1024 바이트보다 큰 키 블록 크기가 사용됩니다.
로우가 정렬된 순서로 삽입되는 경우(예: AUTO_INCREMENT 컬럼을 사용할 때처럼), 인덱스 트리는 high 노드가 하나의 키만 포함하도록 분할됩니다.
이는 인덱스 트리의 공간 활용도를 향상시킵니다.
테이블당 하나의 AUTO_INCREMENT 컬럼에 대한 내부 처리가 지원됩니다.
MyISAM은
INSERT와
UPDATE 연산에 대해 이 컬럼을 자동으로 갱신합니다.
이는 AUTO_INCREMENT 컬럼을 더 빠르게 만들어 줍니다(최소 10%).
시퀀스 상단의 값은 삭제된 후에도 재사용되지 않습니다.
(AUTO_INCREMENT 컬럼이 다중 컬럼 인덱스의 마지막 컬럼으로 정의된 경우, 시퀀스 상단에서 삭제된 값의 재사용이 발생합니다.)
AUTO_INCREMENT 값은
ALTER TABLE 또는
myisamchk로 리셋할 수 있습니다.
삭제와 업데이트, 삽입을 섞어 사용하는 경우에도, 가변 길이 로우는 단편화가 훨씬 적습니다. 이는 인접한 삭제된 블록을 자동으로 결합하고, 다음 블록이 삭제된 경우 블록을 확장함으로써 이루어집니다.
MyISAM은 동시 삽입(concurrent insert)을 지원합니다:
테이블의 데이터 파일 중간에 비어 있는 블록이 없다면, 다른 스레드가 테이블에서 읽기를 수행하는 동안에도
INSERT로 새 로우를 삽입할 수 있습니다.
비어 있는 블록은 로우 삭제 또는 더 많은 데이터를 갖는 가변 길이 로우로의 업데이트 결과로 생길 수 있습니다.
모든 비어 있는 블록이 사용(채워짐)되면, 이후 삽입은 다시 동시성이 보장됩니다.
자세한 내용은
Section 10.11.3, “Concurrent Inserts”를 참조하십시오.
DATA DIRECTORY 및 INDEX DIRECTORY 테이블 옵션을 사용하여 CREATE TABLE을 실행하면, 데이터 파일과 인덱스 파일을 서로 다른 물리 디바이스의 서로 다른 디렉터리에 둘 수 있어 더 높은 속도를 얻을 수 있습니다.
자세한 내용은 Section 15.1.24, “CREATE TABLE Statement”를 참조하십시오.
인덱스가 지정된 컬럼에는 NULL 값을 허용합니다.
이는 키당 0~1 바이트를 사용합니다.
각 문자 컬럼은 서로 다른 문자 집합을 가질 수 있습니다. 자세한 내용은 Chapter 12, Character Sets, Collations, Unicode를 참조하십시오.
MyISAM 인덱스 파일에는 테이블이 올바르게 닫혔는지를 나타내는 플래그가 있습니다.
mysqld가
myisam_recover_options 시스템 변수를 설정한 상태로 시작되면, MyISAM 테이블은 오픈 시 자동으로 체크되며, 테이블이 올바르게 닫히지 않은 경우 복구됩니다.
myisamchk에
--update-state
옵션을 주어 실행하면, 테이블에 체크됨 표시를 합니다.
myisamchk --fast는 이 표시가 없는 테이블만 체크합니다.
myisamchk --analyze는 전체 키뿐 아니라 키의 부분에 대해서도 통계를 저장합니다.
myisampack은
BLOB 및
VARCHAR 컬럼을 팩할 수 있습니다.
MyISAM은 또한 다음과 같은 기능을 지원합니다:
실제 VARCHAR 타입에 대한 지원;
VARCHAR 컬럼은 1 또는 2 바이트에 저장된 길이로 시작합니다.
VARCHAR 컬럼을 가진 테이블은 고정 또는 가변 로우 길이를 가질 수 있습니다.
임의 길이의 UNIQUE 제약 조건.
MyISAM 스토리지 엔진에 특화된 포럼은 https://forums.mysql.com/list.php?21에서 사용할 수 있습니다.18.1 Setting the Storage Engine
18.2.1 MyISAM Startup Options