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.