mysql バックエンドを使用して php で作成した、ユーザー向けのプライベート メッセージング システムがあります。システムは古いメッセージを削除しますが、通常は 500,000 を超えるメッセージを保持します。現在、すべてのデータが 1 つのテーブルに含まれています。
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
「IF message_table.message_text_id != 0」を追加しましたが、そのようなことが可能かどうかわかりません。
原則として、これによりデータベースのサイズが縮小されるかどうか、またはクエリが高速化されるかどうかを判断できますか?