反規範化之前,我想知道這是怎麼回事有以下什麼樣的影響:反規範化對查詢,連接和響應時間有什麼影響?
- 查詢響應時間
- 行的寬度在數據庫
- 加入必要的結果
- 號碼的查詢需要完成的請求
看來,如果我沒有弄錯,所有這些將會是減少?
反規範化之前,我想知道這是怎麼回事有以下什麼樣的影響:反規範化對查詢,連接和響應時間有什麼影響?
看來,如果我沒有弄錯,所有這些將會是減少?
您的假設是正確的。非規範化會提高性能,但不利之處在於它降低了正確性。
此主題的長度在此以前stackoverflow question
豈不行的在數據庫中的寬度增加了討論?
非規範化只應作爲最後手段的優化來完成。
它會增加數據庫的大小,並增加數據重複並使數據難以保持最新和同步。
非規範化是一個相當廣泛的術語,所以沒有快速回答您的問題。
在避免加入的情況下,檢索速度可能會更快。但是,您正在增加更新和數據維護的複雜性,因此需要進行折衷。
您似乎在詢問在系統範圍內查詢次數或速度是否會得到提高,這也不完全是它的意義 - 最好將其視爲特定的本地優化在應用程序中遇到瓶頸,即要考慮使單個查詢或一組查詢運行得更快。
如果您碰巧在Microsoft SQL Server中工作,我強烈建議您將表格標準化並使用所謂的索引視圖進行非規範化。這些是半永久性的數據結構,只要基礎表被更新就更新。通過這種方式,您可以保持兩全其美 - 規範化模式和快速非規範化數據!
Oracle也可能存在類似的情況,不確定。
除了「與數據庫中的行」,你的答案都是正確的。
「反規範化」意味着在一行中存儲比絕對必要的更多信息。如果不增加行寬,這是不可能的。
但最重要的是:你沒有提出所有的問題。
你還在想,如果你故意在你的數據庫中引入Redencancy,那麼你不應該同時引入一些額外的數據庫約束,以防止你的數據庫包含損壞的數據(與自身相矛盾的數據)?
如果對這個問題的答案是'是',那麼也許你應該問自己,是否強制執行所有那些僅僅因爲你介紹贖回而需要的額外約束,不會導致你產生類似的(或多更新性能損失)。
這就是爲什麼它非常適合數據倉庫(不保留任何最新信息),並且不適合在線交易數據庫。不同的用途對不同的設計會更好。 – 2009-06-15 20:33:11
行的寬度會增加?抱歉。你能解釋一下嗎? – 2009-06-15 20:38:17