
Lo primero que, supuse es que para la busquedas de mensajes era mejor hacer que la busqueda por contactos sea numerica y no por string, asi que hice una tabla para asignarle a cada contacto un id. Esa tabla usa InnoDb.
La segunda tabla tiene los id de los contactos y el campo message, que es un varchar de 4000, supuse que text reservaba demasiada memoria, y var no me servia por corto. Uso MySAM para poder hacer un BTREE y hacer busquedas por FULLTEXT. Esta es la estrcutura, fue una cosa de 10 minutos, asi que acepto sugerencias.
Código :
CREATE TABLE contacts ( cont_from_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, cont_to_id INTEGER UNSIGNED NOT NULL, PRIMARY KEY(cont_from_id, cont_to_id) ); CREATE TABLE messages ( mess_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, contacts_cont_to_id INTEGER UNSIGNED NOT NULL, contacts_cont_from_id INTEGER UNSIGNED NOT NULL, mess_from CHAR(200) NOT NULL, mess_to CHAR(200) NOT NULL, mess_date DATETIME NOT NULL, mess_message VARCHAR(4000) NULL, PRIMARY KEY(mess_id), FULLTEXT INDEX messages_btree(mess_message), INDEX messages_FKIndex1(contacts_cont_from_id, contacts_cont_to_id) );
Si alguien le interesa este tema aqui hay dos muy buenos articulos sobre optimizacion de indices.
http://mysql-hispano.org/page.php?id=29
y este
http://mysql-hispano.org/page.php?id=15