2012-04-01 1 views
6

수 나는 두 개의 경로를했습니다MySQL 성능 - 테이블 개수 대. 행

1) 몇 테이블과 그들에있는 모든 사용자의 데이터를 저장 만드는 자신의 개별 콘텐츠

2) 각 사용자에 대한 하위 테이블을 생성 및 저장.

입니다. 2,000,000 행

1) 100,000 테이블 천 행

2

) 50 표 각 각은 내가 가장 효율적 인 경로를 알고 싶어요.

컨텍스트 : 페이스 북과 마찬가지로, 수백만 명의 사용자, 게시물, 사진, 태그. 이 모든 정보는 모든 사용자를위한 거대한 테이블에 있거나 각 사용자는 자신의 서브 테이블을 가지고 있습니다.

+1

무료 비디오 코스 "데이터베이스 소개"를 시청할 수 있습니다. http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=IntroToDatabases –

답변

7

이것은 MySQL에서의이 두 가지 접근 방식의 장단점입니다.

1. 많은 작은 테이블.

단점 : 중고

  • 많은 동시 테이블은 필요 이상의 파일 설명자 (this 확인)
  • 는 100.000 테이블과베이스 장판 의미한다. 프로

:

  • 작은 테이블 작은 인덱스를 의미한다. 작은 인덱스는 전적으로 메모리에로드 될 수 있습니다. 즉, 쿼리가 더 빨리 실행됩니다.
  • 또한 인덱스가 작기 때문에 삽입과 같은 데이터 조작이 더 빠르게 실행됩니다.

2.몇몇 큰 테이블

단점 :

  • 거대한 테이블은 매우 큰 인덱스를 의미한다. 인덱스를 메모리에 완전히로드 할 수없는 경우 대부분의 쿼리가 매우 느립니다.
  • 프로

:

  • 데이터베이스 (및 코드)가 명확하고 mantain하기 쉽다.
  • 테이블이 너무 커지면 파티셔닝을 사용할 수 있습니다. (this을 확인하십시오).

필자의 경험으로 볼 때 메모리에 모든 활성 인덱스를로드 할 수있는 경우 MySQL에서 성능 문제가 아닌 2 백만 개의 행 (필자는 70 백만 개의 행 테이블을 사용했습니다)의 테이블을 경험했습니다.

많은 동시 사용자가있는 경우 Elastic Search과 같은 다른 기술이 이러한 유형의 시나리오에 더 적합하다고 평가할 것을 제안합니다.

1

각 사용자에 대한 표를 만드는 것이 가능하지 않습니다. 그것은 db 디자인 수업에서 배운 첫 번째 것 중 하나입니다.

0

테이블은 데이터베이스의 강력한 논리 구성 요소이므로 RDBMS에 의한 많은 유지 관리 작업에 사용됩니다. 예 : 그것은 테이블 파일 공간, 제한, 할당량, 로그 공간, 트랜잭션 공간, 인덱스 트리 공간 및 기타 많은 것들을 설정하는 것이 일반적입니다. 모든 테이블에 데이터를 저장하는 자체 파일이 있으면 테이블을 조인 할 때 큰 왕복 시간이 소요됩니다.

많은 테이블을 만들면 유지 관리에 실제로 큰 오버 헤드가 발생할 수 있습니다. 또한 관계형 소스의 본질을 부인할 것입니다. 그리고 매번 새로운 테이블을 생성하여 데이터베이스에 레코드를 추가한다고 가정 해보십시오. 그것은 당신의 코드에서 조금 더 어려울 것입니다.

하지만 다시 한 번 시도해 볼 수 있습니다.

+0

감사합니다. Dmitriy .... 도움이됩니다. –

+0

당신은 환영합니다 :) –

+0

@DmitriyReznik 만약 내 쿼리에 조인이 없다면 100k와 같은 많은 테이블을 가지고 있어도 괜찮습니까? – Rams