Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Esta consulta SELECT leva 180 segundos para terminar


(Publicando meu comentário como uma resposta, pois aparentemente isso fez a diferença!)

Se alguém quiser investigar isso mais a fundo acabei de fazer um teste e achei muito fácil de reproduzir.

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

Criar procedimento
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

Preencher Tabela
  call prc_filler(5000)

Consulta 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 Explain Output http://img689.imageshack.us/img689/5592/equals. png

Consulta 2 (mesmo problema)
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
    )
  )

Na saída de explicação http://img291.imageshack.us/img291/8129/52037513. png