2015-02-04 6 views
0

이 내가 실행하기 위해 노력하고있어 쿼리입니다 느리게 : 나는 과거에 빠르게 인덱스를 드롭 할 수있었습니다드롭 인덱스 쿼리는

DROP INDEX id_index on table;

하지만,이 쿼리는 전에 거의 한 시간 동안 달렸다 나는 그걸 포기했다. 이 속도가 느려지는 원인은 무엇일까요?

+0

InnoDB? 어떤 [MySQL 버전] (http://dev.mysql.com/doc/refman/5.5/en/innodb-create-index.html)? –

+0

MySQL Workbench 5.2 CE – Garrett

+0

버전 5.6.17-65.0-56 사용 - select version(); – Garrett

답변

1

SHOW는 테이블 만들기 -이 ENGINE =의 MyISAM을 말한다면, 드롭이 수행되는이 방법 :

  1. 복사 임시로를 통해 전체 테이블 데이터
  2. (느린 인한 I/O의 많은에)
  3. 테이블의 크기에 따라 매우 느릴 수 있습니다 (항상 빠른) 기존 테이블을 대체 할

이를

  • 이름 바꾸기를 (어떤 경우에는 매우 느린) 나머지 모든 인덱스를 다시 작성. 이것은 모든 디스크 I/O 때문입니다.

    ENGINE = InnoDB라고 쓰면 상황이 나아질 수 있습니다. 그러나 PRIMARY KEY를 DROPping하고 있는지 여부는 여전히 중요합니다. KEY가 FOREIGN KEY 제약 조건과 관련이 있는지 여부도 고려해야합니다. old_alter_table이 OFF로 설정되어 있다고 가정합니다.

    http://dev.mysql.com/doc/refman/5.6/en/alter-table.html 에는 많은 세부 정보가 있습니다. 당신이해야 할 말은 ALGORITHM = INPLACE였습니다. 당신은 아마 ALGORITHM = DEFAULT를 얻었고, 문서에서 디폴트가 무엇인지 알지 못합니다.

    ALGORITHM = COPY는 MyISAM에 대해 위에서 언급 한 것과 같습니다.

    ALGORITHM = INPLACE는 테이블/인덱스 크기에 관계없이 매우 짧은 시간이 걸립니다.