14.10.4 테이블의 조각
보조 인덱스에 대한 임의 삽입과 보조 인덱스에서 임의의 삭제하여 인덱스가 조각화 될 수 있습니다. 조각화는 디스크 인덱스 페이지의 물리적 순서가 페이지에 레코드의 인덱스 순서와 동 떨어져 있거나 인덱스에 할당 된 64 페이지의 블록 내에 사용하지 않은 페이지가 다수 존재하는 것을 나타냅니다.
조각화 하나의 현상으로 테이블이 차지하고있는 영역이 본래 차지하고있다 "야해"영역보다 큰 수 있습니다. 그것이 정확히 어느 정도인지를 판정하는 것은 어렵습니다. InnoDB
의 데이터와 인덱스는 모두 B 트리에 저장되며 그 필 팩터 는 50 %에서 100 %까지 변동 할 가능성이 있습니다. 조각의 또 다른 현상은 다음과 같은 테이블 스캔에 걸리는 시간이 본래 걸리는 '야해 "시간보다 긴 수 있습니다.
SELECT COUNT (*) FROM T WHERE non_indexed_column
<> 12345;
이전 쿼리는 MySQL이 큰 테이블에 대해 가장 느린 유형의 쿼리 인 풀 테이블 스캔을 수행해야합니다.
인덱스 스캔 속도를 위해 MySQL에 테이블을 재구성하는 다음 "null" ALTER TABLE
작업을 정기적으로 실행할 수 있습니다.
ALTER TABLE tbl_name
ENGINE = INNODB
MySQL 5.6.3의 시점에서는 ALTER TABLE
를 사용하여 테이블을 재구성하는 "null"변경 작업을 수행 할 수 있습니다. 이전에는 tbl_name
FORCEFORCE
옵션은 인식했지만 무시되었습니다.
MySQL 5.6.17 시점에서는 ALTER TABLE
와 tbl_name
ENGINE=INNODBALTER TABLE
모두 온라인 DDL ( tbl_name
FORCEALGORITHM=COPY
)를 사용합니다. 자세한 내용은 섹션 14.11.1 "온라인 DDL 개요" 를 참조하십시오.
조각 모음 작업을 수행하기위한 다른 방법은 mysqldump를 사용하여 테이블을 텍스트 파일로 덤프 테이블을 삭제하고 그것을 덤프 파일에서 다시로드하는 방법이 있습니다.
인덱스에 삽입이 항상 오름차순이자 레코드가 끝에서만 삭제되지 않는 경우는 InnoDB
의 파일 영역 관리 알고리즘을 통해 인덱스 조각화가 발생하지 않는 것이 보증됩니다.