이 기사에서는 MySQL에 대한 관련 지식을 제공합니다. 프로그래머는 MySQL을 많이 다루어야 한다고 할 수 있지만 MySQL 테이블은 얼마나 많은 데이터를 저장할 수 있습니까? 계산의 근거는 무엇입니까? 아래에서 함께 논의해 보도록 하겠습니다. 모두에게 도움이 되기를 바랍니다.
운영 체제에서는 디스크와 상호 작용하기 위해 메모리도 페이지 크기 4KB로 페이징된다는 것을 알고 있습니다. 마찬가지로 MySQL에서도 처리율을 높이기 위해 데이터를 페이징하는데, MySQL의 데이터 페이지 크기는 16KB이다. (정확히 말하면 InnoDB 데이터 페이지 크기는 16KB입니다.) 자세한 연구는 공식 홈페이지를 참고하여 다음 명령어로 조회할 수 있다.
mysql> SHOW GLOBAL STATUS LIKE 'innodb_page_size'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_page_size | 16384 | +------------------+-------+ 1 row in set (0.00 sec)
오늘은 데이터 페이지의 특정 구조 포인터에 대해 다루지 않고 기본적으로 16kb라는 것만 알아두세요. 이는 노드의 데이터 크기가 16kb
라는 뜻입니다. mysql의 인덱스 구조는 어떻게 해야 할까요? 다들 아시다시피 다음과 같은 b+ 트리 구조입니다
보통 b+ 트리의 리프가 아닌 노드는 데이터를 저장하지 않고 리프 노드(하위 레이어)에만 데이터를 저장하는데, 그런 다음 노드에 대해 이야기해 보겠습니다. 노드는 (위 그림의 경우)
빨간색 상자에서 선택한 각 부분을 요소가 아닌 노드라고 합니다. 노드의 개념과 각 노드의 크기를 이해하면 mysql이 얼마나 많은 데이터를 저장할 수 있는지 계산하기가 훨씬 쉽습니다
먼저 살펴보겠습니다. 루트 노드
예를 들어 우리가 설정한 데이터 유형은 bigint이고 크기는 8b
데이터 자체에는 다음 레벨 인덱스 데이터 페이지의 주소를 저장하는 데 사용되는 작은 공간이 아직 남아 있습니다. , 크기는 6kb
따라서 (8b+6b=14b)의 데이터가 있는 공간으로 계산할 수 있습니다(bigint를 예로 들어). 방금 데이터 페이지의 크기가 16kb라고 언급했습니다. 즉, (16*1024)b인 경우 루트 노드는 (16*1024/(8+6))개의 데이터를 저장할 수 있으며 결과는 약 1170개의 데이터입니다. 노드 계산 방법에 따라 계산하면 다음 단계는 다음과 같습니다. 쉬워지세요.
두 번째 레이어는 각 노드의 데이터 구조가 노드의 데이터 구조와 동일하고 노드의 각 요소가 노드 밖으로 확장되므로 실제로 더 쉽습니다. 두 번째 레이어의 데이터 수는 1170 *1170=1368900이며 문제는 세 번째 레이어에 있습니다. 왜냐하면 innodb의 리프 노드에 전체 mysql 데이터가 직접 포함되어 있기 때문입니다. 필드가 많으면 데이터가 차지하는 공간이 작지 않습니다. 여기서는 1kb로 계산하므로 세 번째 레이어 레이어에서는 각 노드가 16kb이고 각 노드는 16개의 데이터를 보유할 수 있으므로 결국 mysql이 저장할 수 있는 총 데이터는
1170 * 1170 * 16 = 21902400입니다. (수천만 개의 항목)
사실 계산 결과는 와 같습니다. 우리의 일상 업무 경험도 일관됩니다. 일반적으로 MySQL 테이블의 데이터가 1천만 개를 초과하면 테이블로 나누어야 합니다.
마지막으로 오늘 논의한 내용을 사진을 사용하여 요약해 주세요. 마음에 드셨으면 좋겠습니다
추천 학습: mysql 비디오 튜토리얼
위 내용은 MySQL 테이블은 얼마나 많은 데이터를 저장할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!