2009-10-23 67 views
1

現在我有一張照片表。我預計這張桌子會受到很多打擊。例如,如果我把它分成3個表格,例如,如果我有3種不同類型的照片,我會提高性能嗎?或者這不會提高性能?如果經常打到1張桌子,我應該打破1張桌子嗎?

+3

什麼樣的表? Html表格? Lua桌子?餐桌? – 2009-10-23 13:22:43

+0

如果您請求特定類型的照片,它會提高性能。如果你有三千萬行要查詢,並且你返回1000萬這種類型的數據就沒關係。如果你可以只返回一個表中的所有行並刪除where子句,則這更快。您真的必須考慮可能出現的其他問題,例如您希望爲特定用戶提供所有照片。您需要3個查詢,3個結果集並且必須編譯它們。你可以使用聯合,但只有當所有的列都是相同的,那麼你會爭辯再次存儲在一個表中。 Catch 22:D – Robert 2009-10-23 13:30:46

+0

如果不知道你所在的平臺是什麼,就不可能說出來,並且更多地表達「type」的含義。同樣重要的是,您是否將照片以二進制格式存儲在表格中,或者只是指向文件的指針。 如果沒有這個說法很難說,但它不太可能有很大的好處。 – 2009-10-23 13:40:57

回答

1

爲什麼你想把這張桌子分成三種不同類型的桌子,因爲一張照片只是一張照片。這聽起來像你想要一個類別字段,而不是引入額外的表格。

不會提高性能,但是,將

  • 一場噩夢管理
  • 會使你寫麪條代碼
  • 將報告或附加的功能調用一個爛攤子

例如假設你走了你的路線,並創建了三個表:風景,肖像和娛樂,你加載phot os放入這些表中。當您添加另一個類別時會發生什麼,您是否要添加另一個表格?我希望不是。把它們全部放在一張桌子上。給表格添加一個索引(pk)。向表中添加一個類別以對照片進行分類。

0

如果「hit」意味着讀取,特別是如果讀取正在使用主鍵查找,請將它們保存在單個表中。

將表分成許多表有助於您獲得大量數據並且查詢通常使用可分區的密鑰。例如,如果您通常按日期範圍進行查詢,按月分割表可能會有所幫助,因爲只能從包含查詢範圍的表中進行選擇來優化查詢。但是,有更好的方法通過使用分區而不是分割來分隔表來實現效率。

具有較少的查詢讀取數據總會提高性能,但這對簡單密鑰查找沒有太大影響。我敢打賭你在這張桌子上的查找將是簡單的關鍵查找(我可能是錯的),如果是這樣,請在一個表格中保持簡單。

0

我會去一個表的方法與type列,其中包含您的照片類型的typeid或名稱。如果您決定對照片類型進行修改(例如,添加新類型將涉及創建新表格.yuck!),那麼您的建議意味着要在數據庫中添加/刪除/修改表格。

1

你不說你正在使用什麼類型的數據庫。它是SQL關係數據庫還是非SQL數據存儲之一,例如Hadoop,CouchDB,Redis或Tokyo Cabinet?

對於存儲照片,我會選擇其中一個非SQL數據存儲,而不用擔心將不同類型的照片分解到不同的表中。

0

我非常懷疑你的表會被「擊中」足夠的次數來降低你的數據庫性能。我會保持它作爲一個表,並按照上面添加「類型」列。你不應該有任何問題。

0

我也有想法將它們放在一個表中並添加一個鑑別器字段。其他人未提及的:向該字段添加索引!

如果(且僅當)您的選擇正在過濾索引字段,則性能不會受到太大影響。

作爲額外的好處,你可以讓一些ORM使用這個鑑別域來在你的代碼中進行繼承。換句話說,在你的應用程序代碼中,你有一個很好的OO繼承模型,同時可以在任何數據庫後端使用它。