大表好還是多表好(MySQL)
在性能方面,最好是只有幾張多行的表還是多張只有幾行的表?在我的例子中,我有一些組要單獨保存數據。是為每個組創建一個新表,還是將組的所有資訊保存在一個表中(這將變得非常非常大)並有一列標識它屬於哪個組?哪個版本在可擴展性方面會更好?我正在使用 PHP 來訪問數據,每次頁面載入我只需要獲取一兩個組的數據。當儲存大量數據時,我主要關心系統的速度。謝謝。
您應該問自己這些單獨的組是否需要相同的表結構。在關係數據庫中,單獨的表應該代表單獨的實體。以這種方式建構數據庫可以使具有相似欄位的實體保持在一起,並在數據庫中創建邏輯流。
盡可能地嘗試建構您的數據庫,以便單獨的實體擁有自己的表。即使這會以某種方式花費一些可忽略不計的額外性能,它也會在編寫查詢或嘗試擴展數據庫時為您節省數小時的時間。
相信我,作為一個使用過數據庫的人,其中表包含的資訊在邏輯上應該以五六個表的形式存在,您將為自己省去很多麻煩。
在我的例子中,我有一些組要單獨保存數據。是為每個組創建一個新表,還是將組的所有資訊保存在一個表中(這將變得非常非常大)並有一列標識它屬於哪個組?
定義“非常非常大”。
數百萬行?那是大
$$ -ish $$. 任何低於這個值的東西都不是。 如果您使用多個表,您將如何辨識它們?
您不想將組名用作表名,因為有人會創建一個包含不能這樣使用的字元的組並破壞所有內容。因此,您最終會得到另一個表,該表使用其他任意標識符將每個表名連結到其組名。
假設你這樣做了;然後,您將如何編寫遍歷所有這些表的任何類型的查詢,出於管理目的,您可能需要這樣做。讓我們假設數據庫足夠強大,可以在一個查詢中連接或合併那麼多表?(例如,MySQL 曾經被限制為 61 個這樣的表)。
基本上,table-per- thing模型通常是一個壞主意,應該避免。
創建一個單獨的 Groups 表,每個 Group 都有一個唯一標識符,並為您打算針對它執行的查詢合理地索引它。