Salve,
ho molti problemi su una mia tabella e sono arrivato al punto di pensare di doverla ristutturare.
La tabella viene usata dagli utenti del mio sito che la sfruttano per mandarsi messaggi tra di loro.
Per mia fortuna il sito è visitatissimo però ora che siamo arrivati ad un milione di messaggi il db non ce la fà più e va molto lento quando i tantissimi utenti sono connessi.
La tabella è così strutturata:
CREATE TABLE messaggeria (
id int(10) unsigned NOT NULL auto_increment,
data datetime default NULL,
ricevente varchar(15) NOT NULL default '',
id_ricevente int(7) unsigned NOT NULL default '0',
mittente varchar(15) NOT NULL default '',
id_mittente int(7) unsigned NOT NULL default '0',
titolo varchar(50) default NULL,
testo text,
fl_letto_mittente int(1) unsigned NOT NULL default '0',
fl_letto_ricevente int(1) unsigned NOT NULL default '0',
PRIMARY KEY (id),
KEY id_recipient (id_ricevente),
KEY id_sender (id_mittente),
KEY fl_letto_mittente (fl_letto_mittente),
KEY date (date),
KEY idx_utente_ricev (id_recipient,fl_letto_ricevente)
)
le select che rallentano tutto sono queste:
(dove l'utente controlla i propri messaggi)
SELECT id, mittente, titolo, data, fl_letto_mittente,fl_letto_ricevente from messaggi where id_ricevente = 13623 and fl_letto_ricevente <>2 ORDER BY id DESC limit 0, 10
da notare che anche con questo tipo di query
SELECT id, mittente, titolo, data, fl_letto_mittente,fl_letto_ricevente
from messaggi where id_ricevente = 13623 and fl_letto_ricevente in (0,1)
ORDER BY id DESC limit 0, 10
il risultato non migliora. fl_letto_ricevente assume i valori 0 se da leggere, 1 se letto e 2 se cancellato.
Ho pensato a delle soluzioni come ad esempio dividere questa tabella in n tabelle da 100.000 records ognuna in modo da velocizzare il tutto ma non mi piace molto come soluzione. Potete aiutarmi?