MySQL 데이터베이스 테이블의 최대 레코드 수


174

MySQL 데이터베이스 테이블의 레코드 상한은 얼마입니까? 자동 증가 필드가 궁금합니다. 수많은 레코드를 추가하면 어떻게됩니까? 이런 상황을 처리하는 방법? 고마워!


16
1.21 GIGAWATTS는 말할 것도 없습니다!
— Ben

2
메모리가 제공되는 경우 스토리지 엔진에 의해 제한이 설정되므로 (예를 들어) MyISAM을 사용하면 InnoDB를 사용하는 것과 다른 제한을받습니다.
— Jerry Coffin

77
@ Onion-Knight : 동의하지 않습니다. 단일 테이블에 수백만 행 을 삽입하는 것이 일반적 이며 일부 데이터베이스에는 제한이 있으므로 물어볼 가치가 있습니다. MySQL이 수백만 개의 테이블 을 지원하는지 묻는다면 아키텍처 오류가 발생했을 수 있습니다.
— 빌 카윈

답변:


61

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


8
최대 2147483647이므로 수십억 개의 항목을 작업하는 경우 자동 증분 만하면됩니다. (아마도 당신의 엄선 된 문장이 오래 전에 녹아
— 들었을 것입니다

2
서명 된 int 용 @Tchalvak은 mysql 설명서를 읽으십시오.
— Leandro

8
질문의 컨텍스트는 자동 증가 필드가 다른 자원의 한계를 행을 많이 처리하고 할 수없는 경우에 관한 것입니다
— KM.

21
포스터는 숫자 또는 다른 데이터 유형에 대해 묻지 않습니다. . 나는 이것이 어떻게 정답으로 표시 될 수 있는지 이해하지 못한다. 질문이 모호하다는 것을 인정해야하지만 PK 데이터 유형과 테이블의 최대 행 수를 구별해야합니다.
— Bery

1
@Bery, OP는 이것을 답변으로 선택하여 그들이 무엇을했는지 구별했습니다. 분명히 그들은 자동 증가 필드의 용량에 관심이 있었는데, 그것은 내 대답이 다루고 다른 자원의 한계는 아닙니다.
— KM.

238

정수의 최대 값은 테이블에 저장할 수있는 최대 행 수와 거의 관련이 없습니다.

기본 키로 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 테라 바이트의 테이블 크기에 제한이 있습니다. 여기에 맞는 행 수는 각 행의 크기에 따라 다릅니다.


62
쓰레기-나는 이것을 전에 읽었 으면 좋겠다 ... 나는 단지 내 테이블 중 하나에서 내 64 테라 바이트 크기를 능가했으며 지금은 시스템이 너무 느립니다!
— JM4

2 ^ 32 = 4,294,967,295 및 2 ^ 64 = 18,446,744,073,709,551,615 그래서 ... 가장 큰 정수 값은 최대 행 수와 관련이 있습니다. 기본 키일 필요는 없습니다.
— teynon

1
@Tom, InnoDB는 MySQL 5.5의 기본 스토리지 엔진이며 99 %의 경우 더 나은 선택입니다.
— Bill Karwin

2
@ Ext3h, 스핑크스 검색 은 일반적으로 MyISAM 또는 InnoDB의 전체 텍스트 인덱스보다 더 나은 선택입니다.
— Bill Karwin

1
mysql 8의 경우 한도는 256TB이며 페이지 크기는 64KB입니다.
— 쓸모없는 고양이

13

데이터를 삭제하지 말 것을 제안합니다. 테이블이 1000보다 길면 테이블 끝을 자르지 마십시오. 계획에이 사용자가 얼마나 오랫동안 활동하지 않았는지와 같은 실제 비즈니스 로직이 있어야합니다. 예를 들어, 1 년보다 길면 다른 테이블에 넣으십시오. 느린 시간 동안 유지 관리 스크립트에서 매주 또는 매월 이런 일이 발생합니다.

테이블의 여러 행에 도달하면 테이블 샤딩 또는 파티셔닝을 시작하고 users_2011_jan, users_2011_feb와 같은 연도별로 이전 데이터를 이전 테이블에 저장하거나 해당 월의 숫자를 사용해야합니다. 그런 다음이 모델을 사용하도록 프로그래밍을 변경하십시오. 정보가 적은 새 테이블을 만들어 적은 열로 데이터를 요약 한 다음 사용자가 자신의 프로필을 볼 때와 같이 더 많은 정보가 필요할 때만 더 큰 파티션 테이블을 참조하십시오. 이 모든 것은 매우 신중하게 고려되어야하므로 나중에 리팩터링하는 데 너무 비싸지 않습니다. 또한 한 사이트에 항상 사이트를 방문하는 사용자와 보관 된 테이블 세트를 사용하지 않는 사용자 만 둘 수 있습니다.


1
이러한 점에서, MySQL의 분할을보고 매우 유용합니다 dev.mysql.com/doc/refman/5.6/en/partitioning.html
— 빔 Deblauwe

10

InnoDB에서 테이블 크기 제한은 64 테라 바이트이고 MySQL 행 크기 제한은 65,535이며 1,073,741,824 개의 행이 있습니다. 최대 행 크기 제한을 사용하는 최소 레코드 수입니다. 그러나 행 크기가 작 으면 더 많은 레코드를 추가 할 수 있습니다.


65535의 행 제한 으로이 많은 (1,073,741,824) 행을 저장하기 위해 필요한 하드 디스크 크기는 얼마입니까? 제안하십시오
— davidb

1
필요한 하드 디스크 크기는 행 수와 행 크기만으로는 결정할 수 없습니다. 테이블 크기 자체는 64TB입니다. 그러나 TEXT 및 BLOB 열의 데이터는 행과 별도로 저장되므로 추가 공간이 필요합니다. 또한 유형에 따라 크기가 다르므로 TEXT 및 BLOB 열의 수와 유형에 따라 다릅니다. TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT의 네 가지 유형의 TEXT 열이 있습니다. 또한 TINYBLOB, MEDIUMBLOB, BLOB 및 LONGBLOB의 4 가지 유형의 BLOB 열이 있습니다.
— Xylo

2

http://dev.mysql.com/doc/refman/5.6/en/features.html의 확장 성 및 한계 섹션에 따르면 MySQL은 대규모 데이터베이스를 지원합니다. 그들은 5 천만 레코드가 들어있는 데이터베이스와 함께 MySQL 서버를 사용합니다. 일부 사용자는 200,000 개의 테이블과 약 5,000,000,000 개의 행이있는 MySQL 서버를 사용합니다.


"그들"이 어떤 하드웨어를 사용하고 있는지 알려 주시면 도움이 될 것입니다.
— my account_ram

사실, 그렇습니다. 그러나 불행히도 '그들'은 하드웨어에 대해 아무 것도하지 않았습니다
— Data

@myaccount_ram 이것을 괴롭히는 것은 유감이지만, 도움이된다면 실제 MySQL 생산의 한계가 적습니다. 2x db.r4.16xlarge AWS 인스턴스 (1 리더, 1 라이터)에서 ~ 180 억 행의 데이터베이스를 보았습니다. 각 머신에는 64 개의 CPU 코어, 488GB의 램, 25Gbps 네트워크 링크, 64TB의 디스크가 있습니다. 이 DB 규모는 CPU 및 디스크 크기 제한을 모두 추진했으며 AWS는 더 큰 DB 최적화 인스턴스를 제공하지 않습니다. 행을 많이 필요로하지 않는 더 간단한 db 스키마로 대체되었습니다.
— Skylar Brown

1

행 크기 제한

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 행 저장소 및 행 형식 ”을 참조하십시오 .
  • 다른 스토리지 형식은 서로 다른 양의 페이지 헤더 및 트레일러 데이터를 사용하므로 행에 사용 가능한 스토리지 양에 영향을줍니다.

1

링크 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


-3

제한이 없습니다. 사용 가능한 메모리와 시스템 최대 파일 크기에만 의존합니다. 그렇다고 데이터베이스에서 메모리 사용량을 처리 할 때 예방 조치를 취해서는 안된다는 의미는 아닙니다. 항상 사용하지 않는 행을 삭제하거나 특정 숫자 (예 : 천) 내에서 행 수를 유지하는 스크립트를 작성하십시오.


8
'사용하지 않는다'고 생각되는 행을 삭제하면 위험하며 해결하는 것보다 더 많은 문제가 발생합니다. 내 프로젝트 중 하나의 이전 개발자는 올바른 일을하고 있다고 생각하고 3 일 이상 지난 장바구니를 삭제하는 스크립트를 구현했습니다. 무엇을 추측하면 매주 문제가 발생합니다. 정말로 필요한 경우에만 데이터를 삭제하십시오.
— 벤 히치콕

더 나쁜 경우는 누군가가 데이터베이스에 파일 경로를 저장하기 시작할 때입니다 ... 모든 프로젝트 파일은 어디로 갔습니까 .... 3.5M 파일에서 시작하는 작은 프로젝트가 있습니다. 그들이 전부는 아닙니다. 자주 사용됩니다.
— Kendrick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.