2013-07-24 16 views
1

我想知道有多少表(比如〜100,000)而不是一個大表有什麼缺點。一個例子是每個用戶都有一個表,或者user_id是索引的所有用戶都有一個大表。有許多MySQL表的缺點?

E.g.其中一個名爲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處理,而不需要任何分區;即使有一個確實需要對數據進行分區,但仍有better ways比該手動kludge(這會導致模糊,可能不一致的數據並導致數據操作代碼中的冗餘和複雜性)。更何況,在MySQL中,joins are limited to a maximum of 61 tables

相反,單表方法是正確的解決方案到你的問題。

+0

謝謝。這感覺是錯的,所以我很高興我有更多的信息。 –