2010-05-12 4 views
15

내가 innodb 테이블에서 테이블을 실행할 때이 메시지가 대신 나타납니다. 테이블이 이미 최적화되었지만 다른 방식으로 사용되었다는 의미입니까?innodb 테이블을 최적화하십시오

"table | optimize | note | 테이블은 최적화를 지원하지 않으며 대신에 다시 작성 + 분석을 수행합니다."

답변

22
documentation에서

: InnoDB 테이블의 경우

, OPTIMIZE TABLE은 클러스터 된 인덱스에서 인덱스 통계 및 무료 사용되지 않는 공간을 업데이트 할 테이블을 재 구축하는 표를 변경 매핑됩니다. 당신이 InnoDB의 테이블에서 실행하면 다음과 같이 MySQL은 5.1.27부터이는 OPTIMIZE 테이블의 출력에 표시됩니다

mysql> OPTIMIZE TABLE foo; 
+----------+----------+----------+----------------------------------------------------------- 
| Table | Op  | Msg_type | Msg_text              
+----------+----------+----------+-----------------------------------------------------------  
| test.foo | optimize | note  | Table does not support optimize, doing recreate + analyze ... 
| test.foo | optimize | status | OK                
+----------+----------+----------+----------------------------------------------------------- 
당신은 mysqld를 시작하여 다른 스토리지 엔진에 OPTIMIZE 표 작업을 할 수

--skip-new 또는 --safe-mode 옵션. 이 경우 OPTIMIZE TABLE은 ALTER TABLE에 매핑됩니다.

+2

결코 늦지 않는 것이 좋습니다. :) –

3

테이블, 이러한 경우에 사용 OPTIMIZE TABLE

OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE 
tbl_name [, tbl_name] ... 

입니다 테이블의 유형에 따라 optimize에 구문 : 이노에 대한 작업을 실질적으로 삽입, 업데이트를 수행 한 후

  • 또는 삭제 테이블은 innodb_file_per_table 옵션을 사용 가능하게하여 작성 되었기 때문에 자체 .ibd 파일을 가지고 있습니다. 테이블과 인덱스가 재구성되며 운영 체제에서 사용할 수 있도록 디스크 공간을 확보 할 수 있습니다.
  • MyISAM 또는 ARCHIVE 테이블의 많은 부분을 삭제하거나 가변 길이 행 (VARCHAR, VARBINARY, BLOB 또는 TEXT 열이있는 테이블)이있는 MyISAM 또는 ARCHIVE 테이블을 많이 변경 한 후. 삭제 된 행은 연결된 목록에서 유지 관리되며 이후의 INSERT 작업은 이전 행 위치를 다시 사용합니다. OPTIMIZE TABLE을 사용하여 사용되지 않은 공간을 교정하고 데이터 파일 조각을 모을 수 있습니다. 테이블을 광범위하게 변경 한 후에이 명령문은 테이블을 사용하는 명령문의 성능을 향상시킬 수 있습니다.
관련 문제