sql >> Databasteknik >  >> RDS >> Mysql

Denna SELECT-fråga tar 180 sekunder att slutföra

(Att lägga upp min kommentar som ett svar eftersom det uppenbarligen gjorde skillnad!)

Om någon vill undersöka detta ytterligare har jag precis gjort ett test och funnit det mycket lätt att återskapa.

Skapa tabell

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

Skapa procedur

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

Fyll i tabell

  call prc_filler(5000)

Fråga 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

Fråga 2 (samma 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
    )
  )

In Explain Output http://img291.imageshack.us/img291/8129/52037513. png



  1. Access dataverse-anslutningen är nu tillgänglig att testa

  2. Hur infogar man utf-8 mb4-tecken (emoji i ios5) i mysql?

  3. En datamodell för en opinionsbyrå

  4. Lägg till massor av data med lite tidsintervall i Java