일반적으로 varchars보다는 정수를 사용합니다. 공간을 덜 소비하고 정렬 패턴이 색인 생성 속도가 빠르다는 것을 잘 알고 있기 때문입니다. 정수는 CPU의 자연스러운 데이터 유형이므로 성능이 일반적으로 최적입니다. 일반적으로 정수는 4 바이트이며 유니 코드가 아닌 varchar의 4 자에 해당합니다.
INT 유형의 공간이 부족 할까 걱정되면 8 바이트 숫자를 제공하는 BIGINT를 시도하십시오. 이것에 대한 한계는 상당히 커서 레코드 한도에 도달하기 전에 디스크 공간이 부족할 수 있습니다.-) 특히 많은 서버가 64 비트이므로 BIGINT의 성능도 매우 좋아질 것입니다. .
INT가 부족할 때 발생하는 문제에 대한 질문의 첫 번째 부분에 대한 대답은 간단하지 않습니다. 특히 데이터 유형을 BIGINT로 변경하지 않고 말한 것처럼 간단합니다. 기본적으로 수행 할 수있는 작업이 많지 않으며 수행 할 수있는 작업은 데이터베이스의 데이터 특성에 따라 제한됩니다. 이 데이터에 외래 키가있는 레코드는 무엇입니까? 해당 테이블의 모든 데이터와 관련 레코드가 여전히 필요합니까? 많은 초기 데이터 (및 관련 데이터)를 아카이브 할 수 있다고 가정 할 때 제안 할 수있는 유일한 것은 데이터를 테이블 밖으로 옮기는 것입니다 (첫 번째 1 ~ X 백만 레코드라고 말하십시오). ID 시드를 1로 재설정합니다. 권장하지는 않지만 모든 종류의 이유가 있습니다. 예를 들어 id 필드의 최대 값을 확인하는 것과 같은 일을하는 많은 코드가 있습니다. 방금 추가 된 내용을 확인하면 작동하지 않으며 수행하지 않아야합니다. 또한 사람들은 N + 1 이전에 레코드 N이 생성되었다고 가정합니다. 쉬운 대답은 없다고 생각합니다.
마지막으로 MySQL에 대해서는 잘 모르지만 한계에 도달하면 SQL Server에서 오버플로 오류가 발생합니다.