2013-07-24 2 views
1

하나의 큰 테이블이 아니라 많은 테이블을 가지고있는 것이 단점입니까 (~ 100,000). user_id가 인덱스 인 모든 사용자에 대해 사용자 당 하나의 테이블 또는 하나의 큰 테이블을 갖는 예가 있습니다.많은 MySQL 테이블을 가지고있는 단점은 무엇입니까?

예. stuff라는 이름의이 중 하나

+----------+---------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+----------+---------+------+-----+---------+-------+ 
| id  | int(11) | YES |  | NULL |  | 
| user_id | int(11) | YES |  | NULL |  | 
| x  | int(11) | YES |  | NULL |  | 
| y  | int(11) | YES |  | NULL |  | 
| .  | . | . | . | . | . | 
| .  | . | . | . | . | . | 
| .  | . | . | . | . | . | 

대 각각 [user_id]_stuff라는 곳이 많은. 그렇게하면 user_id가 주어진 테이블을 알 수 있습니다.

+-------+---------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+-------+---------+------+-----+---------+-------+ 
| id | int(11) | YES |  | NULL |  | 
| x  | int(11) | YES |  | NULL |  | 
| y  | int(11) | YES |  | NULL |  | 
| . | . | . | . | . | . | 
| . | . | . | . | . | . | 
| . | . | . | . | . | . | 

많은 테이블을 가지고있는 것이 더 빠르지 만 하나의 테이블을 가지고 있으면 유지 관리가 쉽다는 단언이 있습니다.

또한 사용자의 ID가 연결되어 테이블 이름을 만들기 때문에 보안 문제가 발생합니까? 제공된 ID가 숫자인지 쉽게 확인할 수 있습니다.

+0

100k 개의 테이블에 대한 쿼리는 어떻게됩니까? – Strawberry

+0

각 사용자에 대해 하나의 표를 사용하여 정규화 원칙을 위반합니다. 나는 당신이 정상화에 대해 읽을 것을 촉구 할 것입니다. 데이터베이스는 * 많은 * 데이터를 처리하도록 설계되었습니다. – Kermit

+0

@FreshPrinceOfSO는 : 현학적으로 의도하지 만, 참고로 이러한 디자인은 실제로 정상화 원칙을 위반하지 것 - 그것은 [직교 디자인의 원리 (http://en.wikipedia.org/wiki/Principle_of_Orthogonal_Design) 위반합니다. – eggyal

답변

2

내게 많은 테이블이 더 빨리 실행되지만 하나의 테이블을 보유하면 유지 관리가 쉽다는 것을 알 수 있습니다.

Principle of Orthogonal Design과 많은 대조를 이룬 테이블이 있습니다.

하지 마십시오. 적어도 이 없으면에 적합한 인덱스 인 —이 적당하며 테이블 당 수백만 개의 레코드가 있어도 MySQL이 파티셔닝 할 필요없이 쉽게 처리 할 수 ​​있습니다. 하나 데이터를 분할하는 필요했다하더라도, (모호한, 잠재적으로 일치하지 않는 데이터에 상승을 제공하고 데이터 조작 코드 중복과 복잡성으로 이어질 수)이 설명서 kludge보다 better ways있다. 물론, MySQL에서는 joins are limited to a maximum of 61 tables입니다.

대신 단일 테이블 접근 방식은 입니다. 문제의 해결 방법은입니다.

+0

감사합니다. 그것이 틀렸던 것처럼 느껴졌 기 때문에 나는 그것에 관해 더 많은 정보를 가지고있어서 기쁩니다. –

관련 문제