MySQL 데이터베이스 테이블의 레코드 상한은 얼마입니까? 자동 증가 필드가 궁금합니다. 수많은 레코드를 추가하면 어떻게됩니까? 이런 상황을 처리하는 방법? 고마워!
MySQL 데이터베이스 테이블의 레코드 상한은 얼마입니까? 자동 증가 필드가 궁금합니다. 수많은 레코드를 추가하면 어떻게됩니까? 이런 상황을 처리하는 방법? 고마워!
답변:
mysql int 타입은 꽤 많은 행을 수행 할 수 있습니다 : http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
부호없는 int
가장 큰 값은 4,294,967,295
부호 가 없는 bigint
가장 큰 값은18,446,744,073,709,551,615
정수의 최대 값은 테이블에 저장할 수있는 최대 행 수와 거의 관련이 없습니다.
기본 키로 int 또는 bigint를 사용하는 경우 기본 키의 데이터 유형에 고유 값의 수만큼 행을 가질 수 있지만 기본 키를 정수로 만들 필요는 없습니다. CHAR (100)로 만들 수 있습니다. 둘 이상의 열에 기본 키를 선언 할 수도 있습니다.
행 수 외에 테이블 크기에 대한 다른 제한 사항이 있습니다. 예를 들어 파일 크기 제한이있는 운영 체제를 사용할 수 있습니다. 또는 각 행의 크기가 1KB 인 경우 3 억 행만 저장할 수있는 300GB 하드 드라이브가있을 수 있습니다.
데이터베이스 크기의 한계는 실제로 높습니다.
http://dev.mysql.com/doc/refman/5.1/en/source-configuration-options.html
MyISAM 스토리지 엔진은 테이블 당 2 32 개의 행을 지원 하지만 --with-big-tables
최대 2 64 개를 지원 하는 옵션으로 MySQL을 빌드 할 수 있습니다. 행 .
http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html
InnoDB 스토리지 엔진은 행 수에 제한이없는 것 같지만 64 테라 바이트의 테이블 크기에 제한이 있습니다. 여기에 맞는 행 수는 각 행의 크기에 따라 다릅니다.
데이터를 삭제하지 말 것을 제안합니다. 테이블이 1000보다 길면 테이블 끝을 자르지 마십시오. 계획에이 사용자가 얼마나 오랫동안 활동하지 않았는지와 같은 실제 비즈니스 로직이 있어야합니다. 예를 들어, 1 년보다 길면 다른 테이블에 넣으십시오. 느린 시간 동안 유지 관리 스크립트에서 매주 또는 매월 이런 일이 발생합니다.
테이블의 여러 행에 도달하면 테이블 샤딩 또는 파티셔닝을 시작하고 users_2011_jan, users_2011_feb와 같은 연도별로 이전 데이터를 이전 테이블에 저장하거나 해당 월의 숫자를 사용해야합니다. 그런 다음이 모델을 사용하도록 프로그래밍을 변경하십시오. 정보가 적은 새 테이블을 만들어 적은 열로 데이터를 요약 한 다음 사용자가 자신의 프로필을 볼 때와 같이 더 많은 정보가 필요할 때만 더 큰 파티션 테이블을 참조하십시오. 이 모든 것은 매우 신중하게 고려되어야하므로 나중에 리팩터링하는 데 너무 비싸지 않습니다. 또한 한 사이트에 항상 사이트를 방문하는 사용자와 보관 된 테이블 세트를 사용하지 않는 사용자 만 둘 수 있습니다.
InnoDB에서 테이블 크기 제한은 64 테라 바이트이고 MySQL 행 크기 제한은 65,535이며 1,073,741,824 개의 행이 있습니다. 최대 행 크기 제한을 사용하는 최소 레코드 수입니다. 그러나 행 크기가 작 으면 더 많은 레코드를 추가 할 수 있습니다.
http://dev.mysql.com/doc/refman/5.6/en/features.html의 확장 성 및 한계 섹션에 따르면 MySQL은 대규모 데이터베이스를 지원합니다. 그들은 5 천만 레코드가 들어있는 데이터베이스와 함께 MySQL 서버를 사용합니다. 일부 사용자는 200,000 개의 테이블과 약 5,000,000,000 개의 행이있는 MySQL 서버를 사용합니다.
The maximum row size for a given table is determined by several factors:
스토리지 엔진이 더 큰 행을 지원할 수있는 경우에도 MySQL 테이블의 내부 표현은 최대 행 크기 제한이 65,535 바이트입니다. BLOB 및 TEXT 열은 내용이 나머지 행과 별도로 저장되므로 행 크기 제한에 9-12 바이트 만 기여합니다.
데이터베이스 페이지 내에 로컬로 저장된 데이터에 적용되는 InnoDB 테이블의 최대 행 크기는 페이지의 절반보다 약간 작습니다. 예를 들어, 기본 16KB InnoDB 페이지 크기의 경우 최대 행 크기는 8KB보다 약간 작습니다. 이는 innodb_page_size 구성 옵션으로 정의됩니다. “ InnoDB 테이블 제한 ”.
링크 http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html
행 크기 제한
주어진 테이블의 최대 행 크기는 몇 가지 요소에 의해 결정됩니다.
스토리지 엔진이 더 큰 행을 지원할 수있는 경우에도 MySQL 테이블의 내부 표현은 최대 행 크기 제한이 65,535 바이트입니다. BLOB 및 TEXT 열은 내용이 나머지 행과 별도로 저장되므로 행 크기 제한에 9-12 바이트 만 기여합니다.
데이터베이스 페이지 내에 로컬로 저장된 데이터에 적용되는 InnoDB 테이블의 최대 행 크기는 4KB, 8KB, 16KB 및 32KB innodb_page_size 설정의 페이지 절반보다 약간 작습니다. 예를 들어, 최대 16KB InnoDB 페이지 크기의 경우 최대 행 크기가 8KB보다 약간 작습니다. 64KB 페이지의 경우 최대 행 크기는 16KB보다 약간 작습니다. 15.8.8 절“InnoDB 테이블 제한”을 참조하십시오.
가변 길이 열을 포함하는 행이 InnoDB 최대 행 크기를 초과하는 경우 InnoDB는 행이 InnoDB 행 크기 제한에 맞을 때까지 외부 오프 페이지 스토리지를 위해 가변 길이 열을 선택합니다. 페이지 외부에 저장된 가변 길이 열에 대해 로컬로 저장된 데이터의 양은 행 형식에 따라 다릅니다. 자세한 내용은 15.11 절“InnoDB 행 스토리지 및 행 형식”을 참조하십시오.
다른 스토리지 형식은 서로 다른 양의 페이지 헤더 및 트레일러 데이터를 사용하므로 행에 사용 가능한 스토리지 양에 영향을줍니다.
InnoDB 행 형식에 대한 자세한 내용은 15.11 절“InnoDB 행 저장소 및 행 형식”및 15.8.3 절“InnoDB 테이블의 물리적 행 구조”를 참조하십시오.
MyISAM 저장소 형식에 대한 자세한 내용은 16.2.3 절“MyISAM 테이블 저장소 형식”을 참조하십시오.
http://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html
제한이 없습니다. 사용 가능한 메모리와 시스템 최대 파일 크기에만 의존합니다. 그렇다고 데이터베이스에서 메모리 사용량을 처리 할 때 예방 조치를 취해서는 안된다는 의미는 아닙니다. 항상 사용하지 않는 행을 삭제하거나 특정 숫자 (예 : 천) 내에서 행 수를 유지하는 스크립트를 작성하십시오.