2013-02-26 39 views
1

我的網站上有一個崗位制度,並有3種類型的職位SQL:「一代表多列」和「多表多時間查詢」

  1. 的圖片
  2. 視頻
  3. 轉播
  4. 之間

我用4個表來管理這些數據

  1. 圖片
  2. 視頻
  3. 轉貼

每張照片,視頻,轉貼被髮布到網站將有一個交行保持likecount,commentcount等

我要查詢多少次評論被喜歡或被刪除。

我想知道

表,多列,許多空行,一次查詢之間
  1. 一個
  2. 多個表,少空行,多次查詢

哪一個更好更快?

回答

2

我不認爲兩個選項都更好更快 - 一張表通常更快,多張表更好,因爲它更容易維護並且不會導致重複的數據。如果檢索速度是你的主要關注則一個表可以是合理的,否則我會跟正常化堅持 http://en.wikipedia.org/wiki/Database_normalization

即使有多個表,索引好可以使一個巨大的差異,以檢索速度,和其他人說,可能值得考慮一個視圖/存儲過程將數據放在一起

+0

謝謝你,我已經回答了! – Expl0de 2013-02-26 15:51:19

+0

非常歡迎您! – NDJ 2013-02-26 15:52:44

1

只有一個表格,可以消除JOIN的開銷,所以它可能會更快。

但是,根據您的設置,您可能可以使用查看或存儲過程將數據從不同的表中拉出。這些將提高JOIN的效率,因爲查詢執行計劃可以被緩存/優化

3

正如這些類型的問題一樣,這個答案是「它取決於」。

我建議您嘗試創建一個將您的4個表編譯爲單行多列結果集的數據視圖。你甚至可以索引這個視圖,如果需要,INSERT INTO的視圖。這應該讓你很好地瞭解你想如何建模你的數據。

在一個極端您有:

  • 多個表,需要多個指標(如果你想保持強力的一切,就好像它是一個行)將需要更多的存儲空間。
  • 但這也意味着您可以將數據表存儲在不同的文件組和存儲區域中,以便您的更大,更昂貴的二進制數據不會佔用更貴的驅動器空間。

而在另一個極端,你有: *一個表,無需連接,並擁有所有需要在那裏 *,但有被存儲在一個文件文件組和失控成長爲你增添更多的負擔帖子類型

而在中間的某個位置,您有(索引)視圖。 「哪一個更好更快?」

+0

謝謝!那裏有很好的建議! – Expl0de 2013-02-26 15:52:18

2

對此沒有簡單的答案。

如果您將數據分割到多個表中,那麼您需要編寫更復雜的SQL,但數據庫管理員可以將每個表放在不同的磁盤上,因此加載數據會更快。

搜索性能不受此影響,因爲索引可以放在不同的磁盤上。

所以這取決於數據庫體系結構,數據量,索引以及它們如何分配給磁盤以及數據庫優化器是否選擇正確的策略。

+0

我想我必須學習更多的abt數據庫!感謝您的回答! – Expl0de 2013-02-26 15:54:29