2011-11-25 48 views
4

我的用戶表有超過26列,這是正常的嗎?當這個用戶表引起了我的注意時,db已經被歸一化到了第三級。有26列是好的還是有一些其他的優化技術,當你設計你的分貝,我應該做的?MySQL:優化大量列的表

更多:什麼是分區您的表?

+1

那麼,如果你必須存儲一個用戶的26個獨特屬性,那麼有26個列就沒有什麼問題了:)我想說的是:我們不知道上下文就說不出來。但我認爲你只需通過每一個標準化步驟就可以簡單地弄清楚自己。 – Quasdunk

+0

當你問這樣的問題時,總是發佈DDL。規範化基於依賴關係;規範化從不問「有多少列?」。 –

回答

4

26列沒有錯,但如果它們很少使用,那麼它的不同。

不是使用26列,而是使用少用的一個,並使用序列化字符串對它們進行分組。

將字段更改爲文本字段,然後在您的代碼中,您可以反序列化並使用它們。如果您需要更新,請更新數組(從您的代碼中),然後序列化並將其保存到數據庫。

+2

這種方法的優點是什麼?那些「很少使用」(你的意思是通常是NULL還是很少被查詢?)列不太可能影響你的數據庫的性能。但查詢序列化數據*將成爲PITA。 :) –

+0

你說的是我可以結合我認爲最慢的移動列的字段的值。通過對它們進行分組,你的意思是將它們保存爲PHP中的字符串,然後將該字符串放入數據庫中?我從來沒有這樣做過......聽起來很舒服。 – enchance

+1

我的意思是,如果你有例如:背景顏色的值不會經常改變,所以你選擇+反序列化然後使用它。串行化數據的串行化與字符串相同,但您只需在插入時序列化並在讀取時反向。 PLUS:如果您需要添加更多列,您不必更改ALTER表,只需在陣列中添加一個KEY,即可完成 – Gabriel