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 테이블 제한 ”.
- 가변 길이 열을 포함하는 행이 InnoDB 최대 행 크기를 초과하는 경우 InnoDB는 행이 InnoDB 행 크기 제한에 맞을 때까지 외부 오프 페이지 스토리지를 위해 가변 길이 열을 선택합니다. 페이지 외부에 저장된 가변 길이 열에 대해 로컬로 저장된 데이터의 양은 행 형식에 따라 다릅니다. 자세한 내용은“ 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