Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Die Ausführung dieser SELECT-Abfrage dauert 180 Sekunden

(Meinen Kommentar als Antwort posten, da es anscheinend einen Unterschied gemacht hat!)

Falls jemand das weiter untersuchen möchte, ich habe gerade einen Test gemacht und fand es sehr einfach zu reproduzieren.

Tabelle erstellen

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

Verfahren erstellen

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

Tabelle füllen

  call prc_filler(5000)

Abfrage 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

Abfrage 2 (gleiches Problem)

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
    )
  )

Erklären Sie die Ausgabe http://img291.imageshack.us/img291/8129/52037513. png