데이터베이스의 행 수가 너무 많습니까?
MySQL InnoDB 테이블에는 1,000,000개의 레코드가 있습니다.너무 심해요?아니면 데이터베이스로 처리 가능합니까?일부 쿼리(테이블에서 마지막 행을 가져오는 등)는 100 행이 있는 테이블보다 1 밀론 행이 있는 테이블에서 느린(초) 것을 알 수 있기 때문에 질문합니다.
1000000 레지스터가 있는 MySQL InnoDB 테이블을 가지고 있습니다.너무 심해요?
아니요, 100만 행(AKA 레코드)은 데이터베이스에 큰 부담이 되지 않습니다.
100만 레지스터가 있는 테이블에서는 100이 있는 테이블보다 몇 가지 쿼리(테이블의 마지막 레지스터를 취득하는 등)가 느리다는 것을 깨달았기 때문에 질문합니다.
그 진술에는 설명해야 할 것이 많다.일반적인 용의자는 다음과 같습니다.
- 제대로 작성되지 않은 쿼리
- 프라이머리 키를 사용하지 않는다(테이블에 프라이머리 키가 존재한다고 가정한다).
- 설계 불량 데이터 모델(테이블 구조)
- 인덱스의 부족
9700,000개 이상의 레코드(30GB 데이터 파일)를 가지고 있어 문제 없습니다.
테이블 인덱스를 정의하고 개선하는 것만 기억하십시오.
따라서 100만 명이 많지 않은 것은 분명합니다. (그러나 인덱스를 작성하지 않으면 많음)
'설명'을 사용하여 쿼리를 검사하고 쿼리 계획에 문제가 있는지 확인합니다.
이것은 일반적인 오해라고 생각합니다.데이터베이스의 scalability에 관해서는 사이즈가 방정식의 일부에 불과합니다.그 밖에도 어려운(또는 어려운) 문제가 있습니다.
작업 세트의 크기(메모리에 로드되어 액티브하게 작업해야 하는 데이터의 양)데이터를 삽입하고 아무것도 하지 않으면 실제로 쉽게 해결할 수 있습니다.
어느 정도의 동시성이 필요한가?사용자가 한 명만 삽입/읽기를 수행합니까? 아니면 수천 개의 클라이언트가 동시에 작동합니까?
어떤 수준의 약속/내구성 및 일관된 퍼포먼스가 요구됩니까?우리가 각각의 약속을 지킬 수 있도록 해야 하나요?평균거래가 빠른지, 아니면 모든 거래가 확실하게 빠른지(-http://www.mysqlperformanceblog.com/2010/06/07/performance-optimization-and-six-sigma/)와 같은 6시그마 품질관리)를 확인하고 싶은지.
테이블 스키마 ALTER 등 운용상의 문제가 있습니까?InnoDB에서는 이것이 가능하지만 포그라운드에 임시 테이블을 작성해야 하기 때문에 매우 느립니다(모든 연결을 차단).
그래서 저는 두 가지 제한적인 문제를 말씀드리겠습니다.
- 질의 작성 능력/색인이 좋다.
- ALTER TABLE 문을 기다리는 동안 견딜 수 있는 고통의 양.
100만 행을 의미하는 경우 인덱싱 방법과 하드웨어 구성에 따라 달라집니다.100만 행은 엔터프라이즈 데이터베이스나 적절한 기기의 개발 데이터베이스에는 큰 양이 아닙니다.
100만 컬럼(MySQL에서는 그것이 가능한지 확실하지 않음)을 의미한다면, 네, 이것은 조금 큰 것 같고 아마 문제를 일으킬 것입니다.
등록하시겠습니까?레코드 말하는 거야?
100만 장의 레코드는 요즘 데이터베이스로서는 큰 문제가 되지 않습니다.문제가 발생하면 데이터베이스 시스템 자체가 아니라 실행하고 있는 하드웨어가 원인일 수 있습니다.대부분의 경우 DB에 투입할 하드웨어가 부족하기 전에는 DB에 문제가 발생하지 않습니다.
물론 일부 쿼리는 다른 쿼리보다 속도가 느리지만 매우 유사한 두 쿼리가 매우 다른 시간에 실행될 경우 데이터베이스의 실행 계획을 파악하고 그에 맞게 최적화해야 합니다. 즉, 올바른 인덱스 사용, 적절한 정규화 등입니다.
덧붙여서, 테이블에 「마지막」레코드라고 하는 것은 없습니다.논리적인 관점에서 보면, 본래의 순서가 없습니다.
분석 작업을 위해 직접 결합되는 수십억 개의 레코드가 있는 분할되지 않은 테이블을 본 적이 있습니다.우리는 결국 그것을 분할했지만 솔직히 우리는 큰 차이를 보지 못했다.
다만, Oracle에서는 이 기능을 사용하고 있으며, MySQL에서는 해당 볼륨의 데이터를 테스트하지 않았습니다.인덱스는 당신의 친구입니다:)
"레코드 등록"을 의미한다고 가정할 때, MySQL은 확장성이 뛰어나고 하드 디스크에 있는 만큼의 레코드를 저장할 수 있습니다.
물론 검색 쿼리는 더 느리겠지만요.필드를 적절히 색인화하는 것 외에는 다른 방법이 없습니다.
테이블이 커질수록(테이블의 행 수가 많을수록), 일반적으로 인덱스가 없는 경우 쿼리가 느리게 실행됩니다.올바른 인덱스를 추가하면 쿼리 성능이 테이블이 커질수록 향상되거나 저하되지 않습니다.그러나 테이블이 커질수록 쿼리 자체가 더 많은 행을 반환하면 성능이 다시 저하되기 시작합니다.
100만 행은 그리 많지 않지만 DB 서버의 메모리 용량에 따라 달라집니다.테이블이 너무 커서 서버에서 메모리에 캐시할 수 없는 경우 쿼리는 느려집니다.
데이터를 정렬하기 위해 정렬 병합 방법을 사용하기 때문에 제공된 쿼리를 사용하는 속도가 매우 느립니다.
인덱스를 사용하여 검색할 수 있도록 디자인을 재고하거나 정렬할 필요가 없도록 이미 주문했는지 확인할 것을 권장합니다.
언급URL : https://stackoverflow.com/questions/1926079/how-many-rows-in-a-database-are-too-many
'source' 카테고리의 다른 글
MySQL 명령줄을 사용하여 SQL 파일을 가져오려면 어떻게 해야 합니까? (0) | 2022.09.11 |
---|---|
복수의 인수가 있는 Angular 2 파이프를 호출하려면 어떻게 해야 합니까? (0) | 2022.09.08 |
Django & MariaDB / MySQL : select_for_update lock 행을 서브쿼리에서 선택합니까?교착상태의 원인? (0) | 2022.09.08 |
MySQL의 열 값 스왑 (0) | 2022.09.08 |
빈 결과 확인(PHP, PDO 및 MySQL) (0) | 2022.09.08 |