Mysql
 sql >> Base de données >  >> RDS >> Mysql

Cette requête SELECT prend 180 secondes pour se terminer

(Publier mon commentaire comme réponse car apparemment cela a fait une différence !)

Si quelqu'un veut approfondir cette question, je viens de faire un test et je l'ai trouvé très facile à reproduire.

Créer un tableau

CREATE TABLE `filler` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) 

Créer une procédure

CREATE PROCEDURE `prc_filler`(cnt INT)
BEGIN
        DECLARE _cnt INT;
        SET _cnt = 1;
        WHILE _cnt <= cnt DO
                INSERT
                INTO    filler
                SELECT  _cnt;
                SET _cnt = _cnt + 1;
        END WHILE;
END

Remplir le tableau

  call prc_filler(5000)

Requête 1

SELECT id 
FROM filler 
WHERE id =  (SELECT MAX(id) FROM filler  WHERE id =   
 ( SELECT MIN(id) 
    FROM filler
    WHERE id between 2000 and 3000
    )
  )

Equals explique la sortie http://img689.imageshack.us/img689/5592/equals. png

Requête 2 (même problème)

SELECT id 
FROM filler 
WHERE id in  (SELECT MAX(id) FROM filler  WHERE id in   
 ( SELECT MIN(id) 
    FROM filler
    WHERE id between 2000 and 3000
    )
  )

Dans la sortie d'explication http://img291.imageshack.us/img291/8129/52037513. png