我爲我的用戶創建了一個私人消息系統,這是我在php中用mysql後端創建的。系統刪除舊消息,但通常會保留超過500,000條消息。目前,所有的數據都包含在一個表:將私人消息「body」字段存儲在單獨的表中以獲得速度增益
message_table
message_id (int 11)
message_from_id (int 11)
message_to_id (int 11)
message_timestamp (int 11)
message_subject (varchar 50)
message_text (text)
大部分的消息都非常短,所以我考慮了系統更改爲:
message_table
message_id (int 11)
message_from_id (int 11)
message_to_id (int 11)
message_timestamp (int 11)
message_subject (varchar 50)
message_short_body (varchar 50)
message_text_id (int 11)
text_table
text_id (int 11)
text_body (text)
那麼,如果一個短消息輸入時將在'message_short_body'下輸入,如果更長的話將被添加到'text_table'並且'text_id'被存儲爲'message_text_id'。如果消息是訪問我會再有這樣的事情:
SELECT * FROM message_table LEFT JOIN text_table ON text_table.text_id = message_table.message_text_id IF message_table.message_text_id != 0 WHERE message_table.message_to_id = $user_id
我補充說:「如果message_table.message_text_id!= 0」,不知道這樣的事情是可能的。
作爲一般規則,可以判斷這是否會減少數據庫/加速查詢的大小?
一般規則是:當您發現瓶頸(是否?)時優化並測試工作負載的變化。我的意思是,使用'INSERT INTO SELECT'將這個東西複製到新結構中需要幾秒鐘的時間。你可以在你寫這個問題的同時測試選擇性能。 – Prinzhorn