것을 명심하시기 바랍니다 OPTIMIZE TABLE은 조각 모음을 수행하지 않습니다. 내부적으로 OPTIMIZE TABLE 은 여러 작업 (임시 파일로 데이터 복사, 인덱스 재 작성, 인덱스 통계 재 계산)을 수행합니다. 실제로, 내가 가지고있는 예는 표시된 것처럼 수동으로 수행 할 수 있습니다.
예 : 최적화하는 경우 mydb.mytable
다음 명령을 입력하십시오.
OPTIMIZE TABLE mydb.mytable;
mysql은 다음과 같은 작업을 수행합니다.
CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;
이것은 많은 양의 UPDATE 및 DELETE가 발생하는 테이블에 매우 유용합니다.
이를 수행하면 두 가지를 달성 할 수 있습니다
mysql이 올바른 크기의 조각으로 데이터를로드하려는 시도에서 테이블의 조각을 조사하지 못하게하십시오. 이러한 조각을 제거하면이 작업이 줄어 듭니다.
인덱스 통계를 다시 계산하면 MySQL Query Optimizer가 더 나은 EXPLAIN 계획을 구성하는 데 도움이됩니다. 그렇지 않으면, MySQL Query Optimizer가 EXPLAIN 계획에서 잘못된 추측을하기로 결정했기 때문에 실행 시간이 단축 될 수 있습니다. 이것은 대량의 UPDATE 및 DELETE가있는 테이블의 명확한 증상입니다.
경고
캐싱과 관련하여 캐싱은 전체 테이블 스캔을 수행하므로 빠르게 다이빙을 수행합니다. MyISAM 색인 페이지의 경우 MyISAM 키 캐시로 유입 및 유출됩니다. InnoDB의 경우 데이터 및 인덱스 페이지는 InnoDB 버퍼 풀로 들어오고 나옵니다.