Señores, voy a hacer una aplicación sencilla, voy a gaurdar todos los mensajes de MSN en una base de datos de mysql. Estoy pensando en la estructura de la DB mas adecuada para las busquedas, obvivamente va a hacer una DB que va a recibir inserts cada segundo y cuyos mensajes pueden ir (si no estoy mal hasta los 4000 caracteres). Se de DB pero no tengo una experiencia muy extensa (una de las personas que trabajaba conmigo es el monstruo, pero anda ocupado ahorita xD)

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