Ich habe eine große MySQL-Tabelle (ca. 5M Zeilen), auf der ich häufig Daten einfügen.Mysql gleichzeitig wählen und langsam die Datenbank einfügen
Diese Tabelle ist das gleiche, ich habe zum Lesen von Daten aus und manchmal auch die gesamte Datenbank wegen der Auswahl Daten langsam wird, während es viele anhängigen Einsätze sind.
Ich habe Indizes für jedes Feld i in der WHERE statment verwenden, so dass ich weiß wirklich nicht, warum wählen Sie so langsam bekommt.
Kann mir jemand einen Hinweis zur Lösung dieses Problems geben?
hier ist die SQL der Tabelle und Abfrage
CREATE TABLE `messages` (
`id` int(10) unsigned NOT NULL auto_increment,
`user_id` int(10) unsigned NOT NULL default '0',
`dest` varchar(20) character set latin1 default NULL,
`body` text character set latin1,
`sent_on` timestamp NOT NULL default CURRENT_TIMESTAMP,
`md5` varchar(32) character set latin1 NOT NULL default '',
`interface` enum('mobile','desktop') default NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `md5` (`md5`),
FULLTEXT KEY `dest` (`dest`,`body`),
FULLTEXT KEY `body` (`body`)
) ENGINE=MyISAM AUTO_INCREMENT=7074256 DEFAULT CHARSET=utf8
und hier die Abfrage:
EXPLAIN SELECT SQL_CALC_FOUND_ROWS id, sent_on, dest AS who, body,interface FROM messages WHERE user_id = 2 ORDER BY sent_on DESC LIMIT 0,50 \G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: messages
type: ref
possible_keys: user_id
key: user_id
key_len: 4
ref: const
rows: 13997
Extra: Using where; Using filesort
1 row in set (0.00 sec)
es könnte eine Lösung sein, habe ich nur einen Index hinzufügen (user_id, sent_on)? – n0cturnal
Probieren Sie es aus und sehen Sie, ob es hilft. ;-P – tylerl
Ich habe diesen Index hinzugefügt, du hast Recht! Filesort ist verschwunden. Ich danke dir sehr! – n0cturnal