我發現了一個類似的線程,但它並沒有真正捕捉到我想要問的內容 - 所以我創建了一個新的線程。SQL中JOIN的代價如何?和/或,性能和正常化之間的折衷是什麼?
我知道在規範化和性能之間有一個折衷,我想知道繪製該線的最佳做法是什麼?在我的特殊情況下,我有一個消息系統,它有三個不同的表:message_threads(總括消息持有者),messages_recipients(涉及的人)和messages_messages(實際消息+時間戳)。
爲了返回「收件箱」視圖,我必須將messages_threads表,users表和users圖表添加到messages_recipients表中,以便獲取信息以填充視圖(配置文件圖片,發件人名稱,線程ID)...並且我還添加了一個連接到消息以檢索最後一條消息中的文本,以便向用戶顯示最後一條消息的「預覽」。
我的問題是:在SQL中JOIN成本是如何代價的?例如,我可以在messages_threads表中的一個名爲「sendername」的字段下存儲發件人的名稱(我必須離開用戶的聯接來檢索) - 但就規範化而言,我總是教會避免數據冗餘?
你在哪裏畫線?或者我高估了性能如何阻礙SQL連接?
謝謝pax,你是對的 - 我應該堅持ACID。感謝您清除我,我閱讀了一篇關於大規模網站反規範化的文章,並開始質疑我的結構。 – Walker 2011-04-24 22:47:00
@Walker,非規範化_is_有時是一個可行的選擇。你只需要確保它不僅僅會阻礙:-)與大多數生活一樣,這也是一種折衷。 – paxdiablo 2011-04-24 22:52:48