Bonjour,

mon service mysql est vraiment lent et il semblerait que ça vient d'un problème d'index. Surtout de mon système de "gestion d'amis".

Ce genre de query :
SELECT fr_id FROM friends WHERE (fr_sender = '104622' OR fr_receiver = '104622') && fr_validate = "1";
Rows_examined: 829440

Actuellement j'ai ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE IF NOT EXISTS `friends` (
  `fr_id` int(11) NOT NULL AUTO_INCREMENT,
  `fr_sender` int(11) NOT NULL,
  `fr_receiver` int(11) NOT NULL,
  `fr_validate` enum('0','1','2') NOT NULL DEFAULT '0',
  PRIMARY KEY (`fr_id`),
  KEY `fr_sender` (`fr_sender`),
  KEY `fr_receiver` (`fr_receiver`),
  KEY `fr_validate` (`fr_validate`),
  KEY `fr_sender_2` (`fr_sender`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2372395 ;
Je me suis donc renseigné voir comment faisait les autres scripts et j'en suis arrivé à la conclusion que le meilleur était de faire comme cela :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
CREATE TABLE IF NOT EXISTS `friends` (
  `fr_sender` int(11) NOT NULL,
  `fr_receiver` int(11) NOT NULL,
  `fr_validate` enum('0','1','2') NOT NULL DEFAULT '0',
  PRIMARY KEY (`fr_receiver`,`fr_sender`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2372395;
Est ce que je suis sur la bonne voie ?
Et est ce qu'il y a moyen de transformer ma table en un coup ?

Merci