2013-10-22 2 views
3

MySQL 5.6.13을 실행 중이고 프로덕션 데이터베이스에서 CREATE INDEX ... BTREE 문을 실행하고 싶습니다.CREATE INDEX MySQL 5.6.13 프로덕션 데이터베이스에서

이 테이블은 InnoDB이며 4 백만 개의 행을 가지고 있으므로 잠그지 않을 것입니다.

docs에 따르면,이 진술 이 내 테이블을 완전히 잠그고 빠르게 돌아 오는 것처럼 보이지 않습니다. 그러나 나는이 변화를하기 전에 두 번째 의견을 원했다.

이 색인을 만드는 것이 안전할까요?

답변

5

기본적으로, MySQL 5.6의 InnoDB는 인덱스를 생성하는 동안 읽기 잠금을 수행하므로 테이블에서 다른 동시 클라이언트를 선택할 수는 있지만 인덱스가 삽입되는 동안에는 해당 테이블에 삽입/업데이트/삭제할 수 없습니다 작성 중입니다.

는 선택적으로 인덱스 생성도 온라인과 완전하게 수 읽기 잠금을 수행 할 수 있습니다 :

ALTER TABLE my_table ADD INDEX a (a), LOCK=NONE; 

는 MySQL의 온라인 DDL 문에 대한 자세한 내용은 http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html를 참조하십시오. Top 10 advances to availability since MySQL 5.5

PS :

은 또한 MySQL의 커뮤니티 관리자에서 오늘 게시 된이 블로그를 참조 그것은 인덱스 유형 BTREE을 지정할 필요가 없습니다. InnoDB는 BTREE 인덱스만을 지원하므로, 그 옵션을 무시한다.

+0

'BTREE'부분을 추가했는데, 이는 전체 텍스트 색인이 아니므로 모든 것을 잠그는 것 같습니다. 잠그지 않아서 어떤 결과가 있습니까? –

+1

온라인 인덱스 생성은 PRIMARY 또는 UNIQUE 키에는 작동하지 않지만, 아는 한 아무런 문제가 없습니다. 다른 한편, MySQL 5.6의 새로운 기능에는 예상치 못한 문제가 거의있었습니다. 따라서 신중하게 테스트하고 bugs.mysql.com을 연구하는 것이 좋습니다. –

관련 문제