J'ai un système de messagerie privée pour mes utilisateurs que j'ai créé en php avec un backend mysql. Le système supprime les anciens messages mais contient généralement plus de 500 000 messages. Actuellement, toutes les données sont incluses dans une table :
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)
La majorité des messages étant très courts, j'envisage de modifier le système :
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)
Ensuite, si un message court est saisi, il sera inscrit sous "message_short_body" et s'il est plus long, il sera ajouté à "text_table" et le "text_id" sera stocké sous "message_text_id". Lorsque les messages sont accessibles, j'obtiendrais quelque chose du genre :
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
J'ai ajouté "IF message_table.message_text_id != 0" et je ne sais pas si quelque chose comme ça est possible.
En règle générale, est-il possible de savoir si cela réduirait la taille de la base de données ou accélérerait les requêtes ?