2011-10-21 3 views
1

MySQL에 대한 조언이 필요합니다.MySQL - 2 가지 솔루션 간의 최상의 성능

idDVD, idUser, LinkPath, counter가있는 id, nickname, numDVD, money 및 table DVD가있는 사용자 테이블이 있습니다.

이제 나는 최대치를 가질 수 있다고 믿습니다. 20 명의 사용자와 각 사용자는 약 30 개의 DVD를 가지고 있습니다.

그래서 idDVD (자동 증가), idUser (사용자 테이블의 idUser), LinkPath (일반 문자열) 및 카운터가 1에서 30 (고유 번호) 인 DVD를 삽입하면, (숫자 또는 DVD에 따라 다름).

문제는 동일한 UserId를 가진 1에서 30까지 예를 들어 2 3 임의의 DVD를 선택하기 때문에 마지막 열 "counter"를 처리하는 것입니다. 즉, ID 및 DVDname 등을 포함 내 경우에 최적의 솔루션의 경우

그래서 나는 생각하고 열심히 처리하기 위해 (나를 위해 내가 MySQL을 사용한 적이) 또는 더 나은 (각 사용자에 대해 1) 20 개 테이블을 만들 것

감사합니다.

+0

* 'DVD 넣기'* 당신은 * 'DVD' 테이블에 *를 삽입 할 수 있습니다 *, 물론 ... –

답변

3

20 개의 테이블을 만들지 마십시오! 그건 과도한 길일거야. 미래에 더 많은 사용자를 추가해야한다면 어떨까? 안정적으로 유지 관리하고 업데이트하는 것은 사실상 불가능합니다. 같은

더 좋은 방법은 다음과 같습니다 하나 이상의 사용자가 동일한 DVD가있는 경우는 usersDvds 테이블의 또 다른 항목의로

Table users 
-> idUser 
-> other user specific data 

Table dvd 
-> idDvd 
-> DVDname 
-> LinkPath 
-> other dvd specific data (no user data here) 

Table usersDvds 
-> idUser 
-> idDvd 

이 방법, 그것은 아무 문제가 없다 - idDvd 값이 될 것이다 동일하지만 아이디는 다를 수 있습니다. SELECT count(*) FROM usersDvds WHERE userId = 1

+0

고마워요 !! 간단하고 효율적인 솔루션 :) – Strom

1

사용자 당 테이블이 필요하지 않으므로 이후 SQL 프로그래밍을 기본적으로 불가능하게 만듭니다. 그러나 실제로 이러한 데이터 볼륨을 사용하면 병목 현상이 발생하거나 병목 현상이 완화됩니다. 아마도 전체 데이터베이스가 메모리에 들어가서 모든 스키마를 통한 액세스가 실질적으로 즉각적으로 이루어질 것입니다.

0

사용자의 요구 사항을 명확하게 이해하면 사용자가 효율적으로 선택할 수있는 복합 인덱스를 만들어이를 수행 할 수 있어야합니다.

해당 테이블에서 처리되는 데이터가 너무 많으면 일부 기록 데이터를 정리하는 데 도움이됩니다.

관련 문제