J'ai une grande table mysql (environ 5M lignes) sur laquelle j'insère fréquemment des données.Mysql concurrent sélectionner et insérer ralentir la base de données
Cette table est la même que je dois lire des données et parfois la base de données entière devient lente à cause de la sélection de données alors qu'il y a beaucoup d'insertions en attente. J'ai mis des index sur chaque champ que j'utilise dans la déclaration WHERE, donc je ne sais vraiment pas pourquoi select est si lent.
Quelqu'un pourrait-il me donner un indice pour résoudre ce problème?
est ici sql de table et requête
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
et ici la requête:
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)
cela pourrait être une solution, ai-je juste ajouter un index sur (user_id, sent_on)? – n0cturnal
Essayez-le et voyez si cela aide. ;-P – tylerl
j'ai ajouté cet index, vous avez raison! Le fichier a disparu. Merci beaucoup! – n0cturnal