Dynamic-Sql

動態創建表是一種好習慣嗎?

  • June 11, 2019

假設我正在製作一個 IRC 機器人,除了應該儲存在數據庫中的所有其他內容之外,我還想記錄機器人所在的每個頻道中的所有消息。

我已經有一個channels包含列id,channel_name和一些其他資訊的表。

對於記錄每條消息,對我來說最有意義的是messages_channelname為每個通道創建一個表,並在其中儲存消息以及與之關聯的任何其他資訊。

但是,這引發了一個問題 - 表的名稱現在與通道的名稱分離id(儘管我可以通過創建表名來緩解這種情況messages_channelid)。

我覺得這裡的最佳實踐,而不是最有意義的做法,是擁有一個messages包含來自所有渠道的消息的主表,其中包含列和channel_id,其中每個渠道的消息索引。但後來我會(毫無根據)擔心表大小和可能的搜尋速度。id``message``id

解決這個問題的最佳方法是什麼?

這個問題沒有任何確定的答案。

您已經正確地確定了一些可能的權衡(單表=更簡單/可能更慢/更多爭用?,多個表=更複雜/更快,也許?/在其他情況下更難使用?)。

一般的建議是從更直接的單表解決方案開始,然後在測試顯示問題時將其分解。

大多數情況下,只要您擁有良好的硬體和適當的索引設計,您就會在單個表上獲得良好的性能。

根據特定平台,您可能有其他技術解決方案,例如過濾索引視圖和類似的東西。

引用自:https://dba.stackexchange.com/questions/240286