제목처럼 6000만건정도 데이터를 INDEX를 생성하는데 시간이 너무걸리는데
AAA 라는 테이블을 rename to AAA2 시키고 AAA를 인덱스가 들어간 테이블을 생성하고
INSERT INTO AAA (SELECT AAA2)
이렇게 하는게 더 빠를까요?
운영중인 DB에 함부로 할수가 없어서 머리만짜고 있습니다.
리플좀 달아주세요
운영중인 DB라면 끊임없이 트랜잭션이 발생할텐데 인덱스 생성이라뇨~
일단 DB를 스톱 시켜놓고 작업하셔야 합니다.
6천만건이 장난입니까? ^^;;;;
윗선에 이야기해서 새벽시간에 작업하도록 하세요~
저도 천만건 데이터 인덱스 리빌드할때 새벽시간에 스톱해놓고 합니다. ㅠ.ㅠ
6000만건이면 서버 사양에 따라 다르겠지만 적은 양은 아닙니다.
인덱스가 있는 상태에서 insert 하시면 오히려 성능이 더 떨어질 수 있을것 같네요...
차라리 인덱스 없는 테이블 만들고 insert (select~); 한다음 인덱스 만드는게 훨씬 빠릅니다.
그리고 인덱스 생성할 때 locking으로 아무것도 할 수 없을 테니 윗분 말씀처럼 야간 시간에 하셔야 할듯..
nologging 과 pararell 옵션을 넣어서 생성하시고 생성후에 돌려 놓으면
그나마 조금더 빨리 생성하실 수 있습니다.
대량의 데이터를 새로 넣으시려면 테이블에 인덱스가 작성되어있으면 기하급수적으로 insert속도가 느려집니다. 따라서 충분한 데이터가다 insert된 후에 인덱스를 생성하세요. 인덱스는 패러럴 걸어서 하면 좀더 많이 빠릅니다. 그리고 서버사양이 충분치 않으시다면 특별히 그런 용도로 고안된 서버가 아니라면 사용자수가 많치 않은 시간대에 하시거나 새벽에 하시는게 좋습니다.