2011-02-01 89 views
2

我創造笨的應用程序,它會允許任何人,無需登錄,創建一個表單(使用文本框,下拉菜單,複選框,等使用不同的輸入類型填寫)。這種形式可能是1-100個問題,完成後將通過電子郵件發送給其他人,然後填寫到網站上。高效的MySQL數據庫結構

我第一次設立了我的MySQL數據庫類似this post,有相當多的不同的表都只有幾列。然後我編入索引並使用外鍵來鏈接信息。

從那時起,我已經改變,建立了我的數據庫是這樣,所以我做更少的查詢:

Document 
    id, name, email, recipientname, recipientemail, document name 
Document Questions 
    document_id, question_id, question, type, comments 

是具有用更少的列,但更多的查詢效率比多個表我如何做現在呢?我知道normalization扮演一個角色,但是通過讓表格變得如此特別小,阻礙了表演的程度?

回答

1

從一個正常化點有事情可以做,以進一步規範你的數據(收件人可以有自己的實體和類型也可以),但它並不總是訪問您的數據最優化的方式。

例如,如果拆分您的問題分爲4個不同的實體(類型也很容易成爲一個ENUM):

Documents 
Document Questions 
Recipients 
Types 

然後獲取你將執行與查詢您的應用程序的單一形式多個連接。如果您使用的是MyISAM,則在查詢結束之前,您的所有四個表都會被鎖定。錯誤連接和錯誤索引的查詢可能會變得非常緩慢。

一個更好的替代方法是在數據庫上執行四個單獨的查詢(添加相對於您正在運行的最常見的查詢索引)檢索您的數據,這樣的表將保持鎖定狀態的時間更短的時間。

我知道這是一個極端的例子,但我會更專注於您的索引優化和打擊正常化和性能之間的良好平衡。總而言之,有時完全標準化的數據意味着性能較低。

+0

謝謝jaitsu。我將添加額外的實體和類型。 – joshvermaire 2011-02-12 00:31:41