PostgreSQL 使用技巧:「連接操作是免費的」這種說法並不正確,但它確實很有用。盡量避免反規範化,只有在使用者痛點出現時才必須這樣做。開發人員會試圖讓你反規範化,因為“這樣速度更快”,但除非真正的用戶抱怨,否則一定要拒絕他們。
開發者熱衷於反規範化和連結(JOIN)的另一個原因是查詢複雜度。他們希望編寫更簡潔、更易讀的查詢,避免使用大量的連結。而解決這個問題的答案總是「精通SQL」之類的說法。我們會一直使用連接,直到我們完全無法再進行連接為止。
「直接用連結就行了」是@lisamahapatra 經常拿來取笑我的「Jon式口頭禪」之一,因為每次討論資料模型的時候我都會說這句話。大家都知道我會這麼說……事實上,我覺得他們是故意想引誘我說這句話。
@lisamahapatra 我發起這個討論的靈感來自我目前正在進行反規範化以提高速度。相關表現在足夠大,而且資料模型也足夠穩定,不再處於變化狀態,因此進行一些策略性的反規範化可以帶來顯著的性能提升,並且可以透過 EXPLAIN ANALYZEa 進行驗證。
@lisamahapatra 是的,如果資料模型穩定,視圖就非常棒,而且這確實只是一個體驗問題,而不是效能問題。當模型穩定下來,我們不再需要在程式碼中編寫連接操作的靈活性時,要么使用反規範化(為了效能),要么使用視圖(為了體驗)。