我知道對於像Postgresql這樣的關係型數據庫,使用分隔表格會更有效,但我關心的是性能問題,因爲執行最多的查詢將使用UNION ALL
從多個表中獲取行。使用UNION ALL從多個表中獲取行或在生產中使用一個表?
我必須選擇處理這個問題。第一個是:
table1 -> column1, column2
table2 -> column1, column2
table3 -> column1, column2, column3
在該解決方案我必須使用3種不同的查詢合併在生產UNION ALL
和該查詢將執行記錄在系統(該系統中所執行查詢)
另一個是:
table -> column1, column2, typeColumn, extraColumnForTable3
在該溶液我要創建一個額外的列typeColumn
區分行是哪種類型。而且我還必須爲類型table3
創建一個列extraColumnForTable3
,對於table2
和table1
類型,它將爲NULL。在此解決方案中,執行最多的查詢將只包含一條SELECT
聲明。
生產中會有數百萬行,所以我關心性能。 NULL
值可能會佔用數據庫中的額外空間,但我認爲它可以忽略不計。我將使用消除NULL值的部分索引,所以我不認爲這會影響其他提取特定類型的查詢。你認爲哪一個生產效率更高?
「分隔桌子」?分離是[規範化](http://en.wikipedia.org/wiki/Database_normalization)的結果。如果執行得最多的查詢執行該聯合,那麼很可能您的數據結構不是傳統意義上的標準化,而是您只有代表同一事物的專業化的表格,而不是表示泛型和專業化的表格包含對通用中該行的引用。 – Matt 2013-02-13 19:18:50