Mysql
 sql >> Database >  >> RDS >> Mysql

Questa query SELECT impiega 180 secondi per essere completata

(Pubblicare il mio commento come risposta perché a quanto pare ha fatto la differenza!)

Se qualcuno vuole indagare ulteriormente, ho appena fatto un test e l'ho trovato molto facile da riprodurre.

Crea tabella

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

Crea procedura

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

Compila tabella

  call prc_filler(5000)

Interrogazione 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

Domanda 2 (stesso 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
    )
  )

In Spiega output http://img291.imageshack.us/img291/8129/52037513. png