2010-04-21 3 views
4
ALTER TABLE tablename AUTO_INCREMENT = 10000000 

이 쿼리는 업데이트하는 데 오랜 시간이 걸립니다. 왜? 이 쿼리를 최적화해야합니다.AUTO_INCREMENT 재설정 중 MySQL에서 오랜 시간이 걸림

+2

왜이 쿼리가 필요합니까? 테이블에 자동 증가 기본 키가 필요하지 않은 것처럼 보입니다. 테이블 구조 란 무엇이며 리셋의 목적은 무엇입니까? 어쨌든 인덱스를 다시 작성하는 것은 항상 리소스를 소모하는 작업입니다. 나는 당신이 그것을 정기적으로 필요로하지 않기를 바란다. –

+0

하이 샤넬, 고맙습니다. 당신의 빠른 반응은 매우 입니다. 당사 웹 사이트에는 사용자 생성 데이터 및 관리자 생성 데이터가 있습니다. 우리는 너무 많은 사용자가 있습니다.이 경우 관리자가 대량의 데이터를 삽입하고 업데이트해야하고 사용자 데이터와 ID를 충돌시키지 않으려면 자동 재설정을 통해 ID를 예약합니다. 여러 테이블의 삽입 및 업데이트에 대해 동일한 값을 사용하고 증가시킵니다. 대량 삽입 및 업데이트를 수행하고 있으므로 쿼리를 텍스트 파일에 작성하고 명령 줄을 통해 수행합니다. 내 문제를 이해하시기 바랍니다. 제발 도와주세요 – user320343

답변

5

ALTER TABLE은 전체 테이블을 다시 작성합니다. 테이블에 많은 행이 포함되어 있으면 시간이 오래 걸릴 수 있습니다.

auto_increment 값의 값을 높이기 만하면됩니다. 가장 빠른 방법은 더미 행을 삽입 한 다음 필요에 따라 해당 로우를 삭제하는 것입니다. 대용량 테이블의 경우 ALTER TABLE을 수행하는 데 며칠이 걸릴 수 있습니다.

예를 들어, ... 내가 AUTO_INCREMENT ID 열 및 기타 열 COL1, COL2있는 테이블이 있다고 가정

insert into autoinc_table set ID = 10000000; 
delete from autoinc_table where ID = 10000000; 
+0

이것은 내 문제를 해결하지 못했습니다. 즉, int id 필드에 ID가 없음을 나타냅니다. 행을 삭제해도 자체적으로 도움이되지 않았고 행을 삽입해도 자동 증가 값을 다시 설정하지 않았습니다. –

+3

이 트릭은 자동 증가 값을 늘리려는 경우에만 작동합니다. 당신이 그것을 줄이기를 원하는 것처럼 들린다. – Martin

5

사용자 및 관리자 데이터가없는 ID로 구별하지만, 다른 필드를 기준으로해야합니다. ID를 다른 식별자없이 추상 식별자로 사용하면 많은 시간과 리소스를 절약 할 수 있습니다.

+0

'user_type'과 같은 또 다른 열이 있거나 내부에 사용자 카탈로그가있는 다른 테이블이 있다는 것을 의미합니까? – Pathros

+0

@Pathros는 필요에 따라 다릅니다. –

관련 문제